为什么这个轮廓检测代码不能正常工作?

4
我根据这篇论文(关于轮廓检测)的第一部分编写了代码。然而,我的代码生成的图像与论文中的不同。由于我是图像处理新手,因此我认为可能有些地方我没有完全理解。
我将写下论文中的内容和我的实现方法,以便您看看是否存在误解。
论文中说:

我们提出使用局部方法,检查所选窗口n * n内的光照变化。我们通常使用3 * 3窗口,并将图像分成许多重叠区域。对于每个区域,我们计算8个像素邻域中像素强度值的均值和标准差。

对于这部分,我写了:

e=imread('1.jpg');
p=rgb2gray(e);
p=im2double(p);
h=[1 1 1;
   1 1 1;
   1 1 1;]; 
h=h/9;
u=imfilter(p,h);% average filter
Size=size(e);
n=3;
e=[1 1 1;
   1 1 1;
   1 1 1;]; 
Di=stdfilt(p,e); % standard deviation

我这里有个问题:什么是“8像素邻域”?是指(a)不应使用每个3*3局部窗口的中心像素,还是(b)只是另一个本地窗口的术语?
现在来自论文的其余算法:
然后,我们判断所检查区域的中心像素属于线条还是背景。对于像素强度的最大值Ihigh和该区域中像素强度的最小值Ilow,我们计算差异S(i,j),例如:
S(i,j)=Ihigh-Ilow
然后将其与某个阈值进行比较。我们建议在轮廓检测中使用像素强度的平均值和标准偏差来计算阈值T(i,j)。T=u-k*sd(sd=标准偏差),其中k是某个值。然后,轮廓检测的规则为:
如果S(i,j)>=T(i,j),则g(i,j)=1,如果S(i,j)
我为此部分编写了以下代码:
k=1;
Div=k*Di;
t=u-Div;
min=ordfilt2(p,1,ones(3,3));
max=ordfilt2(p,3*3,ones(3,3));
s=max-min;
g=zeros(Size(1),Size(2));
for I=1:Size(1)
    for J=1:Size(2)
        if(s(I,J) >= t(I, J))
            g(I, J) = 1;
        else
            g(I, J) = 0;
        end
    end
end
g=imadjust(g,[0 1],[1,0]);
imshow(g)

我不确定这两行的意思:

 min=ordfilt2(p,1,ones(3,3));
 max=ordfilt2(p,3*3,ones(3,3);

根据文章所述,“我是否遗漏了什么?或者有什么误解?”
这是论文中给出的示例:

example from paper

这是我得到的内容:

own result

原始图像:

original


1
我们能否在帖子中看到您想要的和您得到的内容?还有您正在使用的图片。即使我尝试,也无法在脑海中编译代码,抱歉。 - Ander Biguri
我想要得到一张像论文中展示的耳朵轮廓图片。我试图上传我已有的图片,但是网站不允许我这样做,因为我的声望值只有6(你至少需要10)。 - parastoo91
你的平均计算有点偏差:h=h/8; 而不是除以9!你只设置了8个像素在 h 中。你能否也发布一下你用来得到这个结果的输入图像? - Shai
这是我对论文中提到的“8像素邻域”的理解,我不太确定,不知道是否应该使用h = fspecial('average',3)窗口,还是使用我在上面的代码中编写的一个窗口? - parastoo91
1个回答

2
我认为你的结果看起来并不那么糟糕。关于差异:
  • 您的图像噪声更多,但这可能是因为您具有更高分辨率,显示图像上的更多细节。在查找轮廓之前,您可以尝试对图像运行高斯滤波器。
  • 您的图像中可能有更多灰度值,比纸张图像中的灰度值更多。因此,使用此算法可能会发现更多的细节轮廓。
  • 也许只是由于k的不同数值导致的。

然而,我认为你应该将你的耳朵的灰度值图像与结果进行比较。

2D中8像素邻域表示您不使用中间的像素,而是使用其周围的所有像素。我无法估计这与使用9个像素相比对结果的影响。

关于您的代码的评论:您可以替换

for I=1:Size(1)
    for J=1:Size(2)
        if(s(I,J) >= t(I, J))
            g(I, J) = 1;
        else
            g(I, J) = 0;
        end
    end
end

使用

g=zeros(Size);
g(s>=t)=1;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接