我是一个相当新的图像处理,并希望使用更大的Prewitt内核进行过滤。问题是我无法在维基百科上找到比3x3内核更大的内容。我在类演示中也看到了一个4x4内核,但我对它的评估方式完全不了解。有人能帮助我吗?
答案 0 :(得分:1)
这并没有直接回答你的问题,但我偶然发现了这个问题,因为它跟随@ 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
很抱歉,如果我的答案很长,并没有真正解决你的问题,但是评论显然太长了!希望有所帮助。