Increasing filter size of edge detector
14 次查看(过去 30 天)
显示 更早的评论
Hello,
I am looking at using edge detectors to detect edges in my images but I as wondering if there was a way of increasing the size of the filters? For example increase Sobel or Prewitt from a 3 x 3 array to a 5 x 5 array or bigger. I am looking to see what the effect of a larger window will have on my edge detection.
Thanks, Andrew
0 个评论
回答(2 个)
Nitin
2014-4-7
编辑:Nitin
2014-4-7
There is a nice thread on stackoverflow which might give you the values of the filter you are looking for.
3 个评论
DGM
2022-11-6
For sake of making things local and elaborating, let's consider Daniel's Sobel-esque filters.
For a 5x5 filter, you can do
r = 2; % filter radius
[x y] = meshgrid(-r:r);
fk = x./(x.^2 + y.^2);
fk(r+1,r+1) = 0
You can simply change r to get a different size filter. If you want, you can transpose it.
If you want your output image to stay within a convenient range, you can just prenormalize the kernel depending on how you intend to apply it. If you intend to apply the filter once to get a directional derivative estimate, you can do
fk = fk/-sum(sum(fk(:,1:r))); % for single-pass
... and your image will conveniently stay within [-1 1].
If you intend to do two orthogonal filter passes to calculate the gradient magnitude, you can normalize like so:
fk = fk/(sqrt(5)*r); % for 2-pass
... and your image will stay within [0 1]
... or you can do whatever you want with it as is.
Image Analyst
2014-4-7
You can try difference of Gaussians or something. Use fspecial to build the Gaussians. DOG filters are common edge filters.
0 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!