输出图像无法正常显示

时间:2015-03-09 11:29:36

标签: matlab image-processing adaptive-threshold

我正在编写一段代码来准备一个用于阈值处理的图像,尽管输出图像和返回的像素数据之间似乎不匹配。

我将通过代码与您联系。首先,我定义了具有三个参数的函数 - IMAGE,将被阈值化的图像; r定义中心像素周围邻域的半径,可以从中计算像素数据;和k,'内核'决定了阈值的细节。

function [t] = imadaptive ( IMAGE, r, k )

然后我调用我之前定义的函数,这些函数创建了存储每个像素的平均值和标准差的图像:

meanpic = immean (IMAGE, r);
stdpic = imstd (IMAGE, r);

接下来,我创建了一个新图像t,其中每个像素的强度为0.这将用于存储每个像素的相应阈值:

t = zeros(size(IMAGE));

然后我计算出图像的大小来告诉for-loop何时停止:

[nx, ny] = size(IMAGE);

接下来,我启动for循环并运行一系列if语句来阻止程序检查像(-2,-2)这样的位置的像素值:

 if x-r <= 0
     startx = 1;
 else
     startx = x-r;
 end

 if x+r > nx
     endx = nx;
 else
     endx = x+r;
 end

 if y-r <= 0
     starty = 1;
 else
     starty = y-r;
 end

 if y+r > ny
     endy = ny;
 else
     endy = y+r;
 end

最后,我运行代码来计算每个像素的适当阈值,然后将该值添加到图像t

 R = 128;

 for xp = startx : endx

   for yp = starty : endy  

         if (x-xp)^2 + (y-yp)^2 <= r^2
           thresh = meanpic(xp,yp) * (1 + (k * (((stdpic(xp,yp) / R) - 1))));
         end
   end
 end

 t(x,y) = thresh;

问题是:当我运行此代码时,我得到的图像与我的stdpic相同:图片显示了每个图像的标准偏差值。但我无法弄清楚为什么会这样。这个等式似乎是正确的 - 当我从等式中移除;时,我看到它输出的值非常多变且在0到255之间,因此输出图像t应该看起来非常不同

有人能指出我在这里遇到的错误吗?

1 个答案:

答案 0 :(得分:1)

每次循环都会重新分配thresh。因此,邻域中只有一个像素对每个输出像素有贡献。如果更改thresh没有帮助,请您在此处或在pastebin上发布整个文件?演练格式非常有用,但是代码中的错误总是可能没有显示出来。

修改:在粘贴的第163-165行,将uint8更改为double。在第211行,添加代码以使用像素计数或类似的东西。我认为R的除法发生在uint并截断为零。在数学结束后,最后更改回uint,否则imshow将无法提供您期望的结果。希望这有帮助!