这并不能直接回答您的问题,但我在一段时间后遇到了这个问题,因为它遵循@AnonSubmitter85 的评论可能很有趣。
基于可以找到here 的一篇论文,有许多“方法”来定义给定大小的内核,因为它们用于描述多项式(或多项式的线性组合),这些多项式描述函数的方向导数计算图像。我承认我不了解所有内容,无论如何这里是可以为大小内核生成的可能窗口
1) 3x3
或
2) 4x4
所以我想没有可以计算的单个 7x7 内核。由于 Sobel 和 Prewitt 非常相似,因此您可能会在 File Exchange 上提交一份文件。这是代码,很短。它创建了一个任意大小的通用 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
对不起,如果我的回答很长,并不能真正解决您的问题,但评论显然太长了!希望能有所帮助。