From 0df9ade57604c820741d2626e9ea679f05f17da6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaros=C5=82aw=20Wieczorek?= Date: Sat, 10 Apr 2021 13:21:24 +0200 Subject: [PATCH] Zadanie4-fixes. --- 04/do_sprawdzenia/cpp/blur_linear.cpp | 36 ++++++++++++------- 04/do_sprawdzenia/cpp/convolution.cpp | 4 +++ .../src/core/transformations/blur_linear.cpp | 36 ++++++++++++------- .../src/core/transformations/convolution.cpp | 4 +++ 4 files changed, 54 insertions(+), 26 deletions(-) diff --git a/04/do_sprawdzenia/cpp/blur_linear.cpp b/04/do_sprawdzenia/cpp/blur_linear.cpp index 11ddc59..09a0f49 100644 --- a/04/do_sprawdzenia/cpp/blur_linear.cpp +++ b/04/do_sprawdzenia/cpp/blur_linear.cpp @@ -1,4 +1,5 @@ #include "blur_linear.h" +#include BlurLinear::BlurLinear(PNM* img) : Convolution(img) @@ -18,23 +19,32 @@ PNM* BlurLinear::transform() math::matrix mask(maskSize, maskSize); - int maskValCount = 0; + int temp = 0; - for (int i=0; i < maskSize; i++) + for (int x = 0; x < maskSize; x++) { - for (int j=0; j < maskSize; j++) + for (int y = 0; y < maskSize; y++) { - if (normalize) - { - mask[i][j] = tmpMask.at(maskValCount).toDouble() / Convolution::sum(mask); - maskValCount++; - } - else - { - mask[i][j] = tmpMask.at(maskValCount).toDouble(); - maskValCount++; - } + std::cout << "value " << tmpMask.at(temp).toDouble() << std::endl; + mask(x, y) = tmpMask.at(temp).toDouble(); + temp++; } } + + float sum_mask = sum(mask); + + if (normalize) + { + if (sum_mask == 0){ + sum_mask = 1.0; + } + for (int x = 0; x < maskSize; x++) + { + for (int y = 0; y < maskSize; y++) + { + mask(x, y) = mask(x, y) / sum_mask; + } + } + } return convolute(mask, RepeatEdge); } diff --git a/04/do_sprawdzenia/cpp/convolution.cpp b/04/do_sprawdzenia/cpp/convolution.cpp index a35e9e1..bd8dde9 100644 --- a/04/do_sprawdzenia/cpp/convolution.cpp +++ b/04/do_sprawdzenia/cpp/convolution.cpp @@ -52,6 +52,10 @@ PNM* Convolution::convolute(math::matrix mask, Mode mode = RepeatEdge) PNM* newImage = new PNM(width, height, image->format()); float weight = Convolution::sum(mask); + if (weight == 0) + { + weight = 1.0; + } math::matrix reflection = Convolution::reflection(mask); for (int x=0; x < width ; x++) diff --git a/app/cpp/mysimplegimp/src/core/transformations/blur_linear.cpp b/app/cpp/mysimplegimp/src/core/transformations/blur_linear.cpp index 11ddc59..09a0f49 100644 --- a/app/cpp/mysimplegimp/src/core/transformations/blur_linear.cpp +++ b/app/cpp/mysimplegimp/src/core/transformations/blur_linear.cpp @@ -1,4 +1,5 @@ #include "blur_linear.h" +#include BlurLinear::BlurLinear(PNM* img) : Convolution(img) @@ -18,23 +19,32 @@ PNM* BlurLinear::transform() math::matrix mask(maskSize, maskSize); - int maskValCount = 0; + int temp = 0; - for (int i=0; i < maskSize; i++) + for (int x = 0; x < maskSize; x++) { - for (int j=0; j < maskSize; j++) + for (int y = 0; y < maskSize; y++) { - if (normalize) - { - mask[i][j] = tmpMask.at(maskValCount).toDouble() / Convolution::sum(mask); - maskValCount++; - } - else - { - mask[i][j] = tmpMask.at(maskValCount).toDouble(); - maskValCount++; - } + std::cout << "value " << tmpMask.at(temp).toDouble() << std::endl; + mask(x, y) = tmpMask.at(temp).toDouble(); + temp++; } } + + float sum_mask = sum(mask); + + if (normalize) + { + if (sum_mask == 0){ + sum_mask = 1.0; + } + for (int x = 0; x < maskSize; x++) + { + for (int y = 0; y < maskSize; y++) + { + mask(x, y) = mask(x, y) / sum_mask; + } + } + } return convolute(mask, RepeatEdge); } diff --git a/app/cpp/mysimplegimp/src/core/transformations/convolution.cpp b/app/cpp/mysimplegimp/src/core/transformations/convolution.cpp index a35e9e1..bd8dde9 100644 --- a/app/cpp/mysimplegimp/src/core/transformations/convolution.cpp +++ b/app/cpp/mysimplegimp/src/core/transformations/convolution.cpp @@ -52,6 +52,10 @@ PNM* Convolution::convolute(math::matrix mask, Mode mode = RepeatEdge) PNM* newImage = new PNM(width, height, image->format()); float weight = Convolution::sum(mask); + if (weight == 0) + { + weight = 1.0; + } math::matrix reflection = Convolution::reflection(mask); for (int x=0; x < width ; x++)