0
让为保持数据矩阵D
即S=sign(D)
的符号的矩阵。我想在S
的两个跟随单元之间找到垂直变化。 (我试图检测高斯差分后的边缘)。为了避免噪声,只有当我在两个结果像素中找到边缘时,才想要执行此操作。使用滤波器和二维卷积发现符号变化
我已经实现了这个数学上很好的代码(回答了我的要求)。 (适用于边缘的一些重量)
[D,S]=DogCalc(FileName);%the function is in the end of this file
edges=zeros(size(D));
for i=1:rowSize*columnSize-columnSize
if(S(i)~=S(i+1)&&S(i+columnSize)~=S(i+1+columnSize))%apply weighted edge for horizontal edge
edges(i)=abs((D(i)*S(i+1)-D(i+1)*S(i))/(S(i+1)-S(i)));
elseif(S(i)~=S(i+columnSize)&&S(i+1)~=S(i+1+columnSize))%apply weighted edge for vertical edge
edges(i)=abs((D(i)*S(i+columnSize)-D(i+columnSize)*S(i))/(S(i+columnSize)-S(i)));
end
end
imshow(edges);
我试图使用文件管理器来避免for循环无济于事。假设滤波器在回答条件的有趣像素中提取了一个包含1
的矩阵(替换if
语句)。一切都错了:
Tester=[1 -1; 1 -1];
%V for vertical and H for horizontal
VEdges=abs(imfilter(S,0.25*Tester,'same'));
HEdges=abs(imfilter(S,0.25*Tester.','same'));
VEdges(VEdges<1)=0;
HEdges(HEdges<1)=0;
- 它使用的过滤器是可行的\正确的是?
- 如果是这样,我做错了什么?
我正在寻找与for循环相同的结果。 'S'可以是'1'或'-1'(见我的编辑)。我得到的输出是'0'或'1',问题是我得到了一倍的边缘。 – havakok
所以你想只有一个'1'有一个连续的边缘?运行另一个过滤器[1 1]或[1 1]'并将结果阈值... –
是的,我想要一个'1'。你可以好好扩展为什么这个过滤器有帮助吗? – havakok