我目前正在编写一段代码来准备图像以进行阈值处理,尽管输出图像和返回的像素数据之间似乎存在不匹配。
我会通过代码告诉你。首先,我定义了接受三个参数的函数 - 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
看起来应该大不相同。
谁能指出我在这里做错了什么?