输出图像无法正确显示



我目前正在处理一段代码,该代码为阈值设置准备图像,尽管输出图像和返回的像素数据之间似乎不匹配。

我将向您介绍代码。首先,我定义接受三个参数的函数 - IMAGE ,将被阈值化的图像; r定义中心像素周围邻域的半径,从中可以计算像素数据;和k,确定阈值细节的"内核"。

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

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

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

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

t = zeros(size(IMAGE));

然后,我计算出图像的大小,以告诉 for 循环何时停止:

[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看起来应该大不相同。

谁能指出我在这里做错了什么?

每次

通过循环重新分配thresh。 因此,邻域中只有一个像素对每个输出像素有贡献。 如果更改脱粒没有帮助,请在此处或粘贴上发布整个文件? 演练格式非常有用,但始终有可能错误存在于未显示的代码中。

编辑:在粘贴的第 163-165 行,将uint8更改为 double 。 在第 211 行,添加代码以使用像素计数或类似内容。 我认为除以R发生在uint并截断为零。 在数学之后,最后改回uint,否则imshow不会给你预期的结果。 希望这有帮助!

相关内容

  • 没有找到相关文章