我目前正在尝试在MatLab中编写一个循环每个像素的函数,获取围绕它的半径内像素的平均强度,然后将该强度应用于中心像素,有效地模糊图像。 / p>
我首先声明函数并找到图像的最大宽度和高度,nx
和ny
:
function [] = immean(IMAGE, r)
[nx, ny] = size(IMAGE);
然后,我创建了一个与图像变量IMAGE
大小相同的完全黑色图像。这样,一旦找到了邻域的平均强度,我就可以存储每个像素的值。
average = zeros(size(IMAGE));
然后我遍历图像:
for x = 1:nx
for y = 1:ny
并应用一系列if语句来处理像素周围的圆半径不适合图像的情况。 (例如,半径为5的(1,1)像素的起点为-4,这会导致错误):
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
这有效地创建了一个可能属于循环样本范围的值的平方值,这大大加快了程序的速度。之后,我遍历此正方形内的值,找到落在中心像素半径范围内的任何像素。然后将这些像素的强度添加到名为total
的变量中,并且计数pixelcount
递增:
total = 0;
pixelcount = 0;
for xp = startx : endx
for yp = starty : endy
if (x-xp)^2 + (y-yp)^2 <= r^2
total = total + uint64(IMAGE(xp, yp));
pixelcount = pixelcount + 1;
end
end
end
然后我通过将total
除以pixelcount
找到圆形像素样本的平均强度,然后将该值插入完全黑色图像average
的相应像素中:< / p>
mean = total / pixelcount;
average(x,y) = mean;
问题是:这不起作用。而不是原始图像的模糊版本,我得到一个完全白色的图像。我不确定为什么 - 当我从最后一行开始;
时,它向我显示mean
构成了许多价值观 - 它并不像他们所有的那样所以我认为分配线average(x,y) = mean;
一定有问题,但我无法找出它是什么。
有人能看出为什么会出错吗?