7x7 Prewitt内核

时间:2014-09-19 20:03:12

标签: matlab image-processing filter computer-vision

我是一个相当新的图像处理,并希望使用更大的Prewitt内核进行过滤。问题是我无法在维基百科上找到比3x3内核更大的内容。我在类演示中也看到了一个4x4内核,但我对它的评估方式完全不了解。有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

这并没有直接回答你的问题,但我偶然发现了这个问题,因为它跟随@ AnonSubmitter85的评论而感兴趣。

基于可以找到here的论文,有很多方法可以找到。定义给定大小的内核,因为它们用于描述多项式(或多项式的线性组合),这些多项式描述了计算图像的方向导数的函数。我承认我并不了解所有内容,无论如何这里是可以为大小内核生成的可能窗口

1)3x3

enter image description here

2)4x4

enter image description here

所以我猜没有可以计算的单个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

很抱歉,如果我的答案很长,并没有真正解决你的问题,但是评论显然太长了!希望有所帮助。