Ich arbeite in OpenCV C++. Ich habe die classical lena image genommen und Gaussian Noise bestimmter Mittel und Varianz noised_lena angewendet. Ich habe dann ein durchschnittliches Filter auf dieses gerasterte Bild angewendet und ein unscharfes Bild Averaged Image erhalten.OpenCV - Keine erwünschte Ausgabe beim Anwenden des Laplace-Filters
Jetzt, wenn ich Laplace-Filter anwenden, muss es die Kanten not correct output korrekt erkennen. Aber ich bekomme nicht die gewünschte Ausgabe, wo das erwartete Bild sein sollte, man kann die Kanten sauber erkennen. Der Code ist unten angegeben.
Vielen Dank für die Hilfe im Voraus.
int main(int argc, char *argv[])
{
int i, dim, k, l, j;
float res=0.0;
Mat M = imread(argv[1],0); //input image in M
Mat N(M.rows, M.cols, CV_8U);//Image obtained after applying average filter
Mat Lap_N(M.rows, M.cols, CV_8U);//Padding the N with zeros based on the filter size given by the user
Mat Lap(M.rows,M.cols,CV_8U);// image obtained after applying Laplacian filter
cout << "enter the size of the filter u want odd number only"<<endl;
cin >> dim;
Mat Pad_M((M.rows+((dim-1))), (M.cols+((dim-1))), CV_8U);
Mat Lap_M((M.rows+((dim-1))), (M.cols+((dim-1))), CV_8U);
copyMakeBorder(M, Pad_M,dim/2,dim/2,dim/2,dim/2, BORDER_CONSTANT, 0);
/*Average filter*/
for(i=0;i<=Pad_M.rows-dim;i++)
{
for(j=0;j<=Pad_M.cols-dim;j++)
{ res = 0.0;
for(k=0;k<dim;k++)
{
for(l=0;l<dim;l++)
{
res += Pad_M.at<uchar>(i+k,j+l);
}
}
res = res/(dim*dim);
N.at<uchar>(i, j)=(uchar)((int)(res));
}
}
/* Laplacian Filter*/
copyMakeBorder(N, Lap_M,dim/2,dim/2,dim/2,dim/2, BORDER_CONSTANT, 0);
res = 0;
for(i=0;i<=Lap_M.rows-dim;i++)
{
for(j=0;j<=Lap_M.cols-dim;j++)
{
res = 0.0;
for(k=0;k<dim;k++)
{
for(l=0;l<dim;l++)
{
if(k==dim/2 && l==dim/2)
{
res =res - (((dim*dim)-1)*((float)Lap_M.at<uchar>(i+k,j+l)));
}
else
{
res += Lap_M.at<uchar>(i+k,j+l);
}
}
}
Lap_N.at<uchar>(i, j)=(uchar)((int)(res));
}
}
imshow("original", M);
imshow("padded", Pad_M);
imshow("averaged", N);
imshow("Laplacian", Lap_N);
//imwrite("Lap2,500,5*5_lena.png",Lap);
waitKey(0);
return 0;
}
Was bekommen Sie, was Sie nicht erwarten? – vu1p3n0x
Ich denke, Sie brauchen möglicherweise die Normalisierung Schritt bei der Anwendung der Laplace-Filter: "res = res/(dim * dim);" – vu1p3n0x