Poniższy program nie działa. Wdrażam filtr Gaussa 3x3, aby wyostrzyć plik obrazu FACE DETECTION.png
, ale wynikiem jest tylko biały kolor. Myślę, że wartość sumy jest większa niż 255 w operacji splotu. Potrzebuję rozwiązania ...
KOD:
int main()
{
Mat src, dst;
float sum;
/// Load an image
src = imread("FACE DETECTION.png", 0);
if( !src.data )
{ return -1; }
// define the kernel
float Kernel[3][3] = {
{1.0, 2.0, 1.0},
{2.0, 4.0, 2.0},
{1.0, 2.0, 1.0}
};
dst = src.clone();
for(int y = 0; y < src.rows; y++)
for(int x = 0; x < src.cols; x++)
dst.at<uchar>(y,x) = 0.0;
//convolution operation
for(int y = 1; y < src.rows - 1; y++){
for(int x = 1; x < src.cols - 1; x++){
sum = 0.0;
for(int k = -1; k <= 1;k++){
for(int j = -1; j <=1; j++){
sum = sum + Kernel[j+1][k+1]*src.at<uchar>(y - j, x - k);
sum = sum>255? 255:sum;
sum = sum<0? 0:sum;
}
}
dst.at<uchar>(y,x) = sum;
}
}
namedWindow("final");
imshow("final", dst);
namedWindow("initial");
imshow("initial", src);
waitKey();
return 0;
}
Odpowiedzi:
1 dla odpowiedzi № 1Problem stanowi jądro. Suma jądra powinna być równa jednej, ale Twoja równa się 16.
kernel = 1/16* kernel;
naprawi twój problem.