Increasing filter size of edge detector
13 ビュー (過去 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!