我想在我的图像的每个像素上找到边缘幅度,为此我需要应用Guassian滤波器的二阶导数。我正在使用索贝尔。它是正确的还是我应该使用其他过滤器?
Sobel(src,magY,CV_32F,0,1,size);
这是图片
在算法中写道,使用的可操纵滤波器是二阶导数 高斯。并通过绘制边缘幅度来输出
我试图使用索贝尔,但我没有得到这个输出。我也试过拉普拉斯,但输出与上面的不相似。
答案 0 :(得分:0)
要找到边缘幅度(如非常基本的边缘检测方法),您只需使用" imfilter" 喜欢在
filter = fspecial('gaussian',h,sigma); %create a gaussian filter
filtered = imfilter(img, filter); %gaussian convolved with image
figure;imshow(filtered,[]); %you can see a blurred version of your image
[fx,fy] = gradient(filtered); %take that blurred image's derivative
然后在
中找到衍生物的大小edgemap = fx.*fx + fy.*fy;
如果您愿意,可以规范化此边图或应用阈值。
答案 1 :(得分:0)
高斯的二阶导数是什么意思?如果你试图在图像的每个像素处获得边缘幅度,你可以应用高斯差分,这基本上是2高斯模糊图像之间的差异,每个模糊它自己的西格玛/内核大小。显示内核大小为3和1的DoG方法的c ++代码如下所示:
cv::GaussianBlur(imagep,image1, cv::Size(3,3), 0, 0, cv::BORDER_DEFAULT );
cv::GaussianBlur(imagep,image2, cv::Size(1,1), 0, 0, cv::BORDER_DEFAULT );
finalImage=image2-image1;
差异将是左边缘,因为DoG是带通,高频噪声被过滤掉,而低于带通下限的低频将是对象的同质部分。所以在乐队内的任何东西都会留下边缘。
从那里你应该能够找到你的优势。
希望以某种方式帮助你。如果您需要更多帮助,或者这不是您要求的,请随时发表评论,我会尽力回复(: