Increasing filter size of edge detector

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

回答 (2 件)

Nitin
Nitin 2014 年 4 月 7 日
編集済み: Nitin 2014 年 4 月 7 日

0 投票

There is a nice thread on stackoverflow which might give you the values of the filter you are looking for.

3 件のコメント

Andrew
Andrew 2014 年 4 月 7 日
Thanks for the response.
I have looked into fspecial to do this but you can't seem to change the size of sobel and prewitt. It also appears to be the same with kosevi that you mentioned. Ideally what I want to do is take the edge detectors in MATLAB and edit the search area (I hope this makes sense).
Nitin
Nitin 2014 年 4 月 8 日
Sorry, I have updated my answer. Hopefully this will help
DGM
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
fk = 5×5
-0.2500 -0.2000 0 0.2000 0.2500 -0.4000 -0.5000 0 0.5000 0.4000 -0.5000 -1.0000 0 1.0000 0.5000 -0.4000 -0.5000 0 0.5000 0.4000 -0.2500 -0.2000 0 0.2000 0.2500
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
Image Analyst 2014 年 4 月 7 日

0 投票

You can try difference of Gaussians or something. Use fspecial to build the Gaussians. DOG filters are common edge filters.

質問済み:

2014 年 4 月 7 日

コメント済み:

DGM
2022 年 11 月 6 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by