我是图像处理的新手,想使用更大的Prewitt内核进行过滤。问题是我在维基百科上找不到比3x3内核更大的东西。我也看过一个4x4内核的类演示,但完全不知道它是如何评估的。有人能帮帮我吗?
发布于 2014-09-20 05:21:09
这并没有直接回答你的问题,但我偶然发现了这篇文章,它可能会很有趣,因为它遵循了@AnonSubmitter85的评论。
基于一篇可以找到here的论文,有许多方法可以定义给定大小的核,因为它们用于描述多项式(或多项式的线性组合),这些多项式描述了计算图像方向导数的函数。我承认我并不是什么都懂,不管怎么说,这里有一些可能的窗口,可以用来生成大小不同的内核
1) 3x3

或
2) 4x4

所以我猜没有一个7x7内核是可以计算的。由于Sobel和Prewitt非常相似,在文件交换上有一份意见书可能会引起你的兴趣。下面是代码,非常简短。它创建了一个任意大小的通用Sobel过滤器(我没有任何功劳,我只是粘贴了代码,这样你就可以更容易地获得它)。
%Program for creating generalised Sobel operator
%Authors : Jeny Rajan, K.Kannan
%Medical Imaging Research Group, NeST, Trivandrum
%http://jenyrajan.googlepages.com/
%http://kannan.keizer.googlepages.com/kannankeizer
%This program can be used to generate sobel filter of any order
% Usage [E Mx My]=Gsobel(img,Wsize)
% eg. [E Mx My]=Gsobel(img,5)
% E - Resultant Edge image generated with sobel filter of window size Wsize
% Mx & My - Horizontal and Vertical Masks
% img - input image
% Wsize - Filter window size
function [E Mx My]= GSobel(img,Wsize)
for i=1:Wsize
Sx(i)=factorial((Wsize-1))/((factorial((Wsize-1)-(i-1)))*(factorial(i-1)));
Dx(i)=Pasc(i-1,Wsize-2)-Pasc(i-2,Wsize-2);
end
Sy=Sx';
Dy=Dx';
Mx=Sy(:)*Dx;
My=Mx';
Ey=imfilter(double(img),My,'symmetric');
Ex=imfilter(double(img),Mx,'symmetric');
E=sqrt(Ex.^2+Ey.^2);
figure,imshow(img,[]),title('Original Image');
figure,imshow(E,[]),title('Edge Image');
function P=Pasc(k,n)
if (k>=0)&&(k<=n)
P=factorial(n)/(factorial(n-k)*factorial(k));
else
P=0;
end很抱歉,如果我的答案很长,并没有真正解决你的问题,但它显然太长的评论!希望这能有所帮助。
https://stackoverflow.com/questions/25941604
复制相似问题