将值分配给像素会出现问题

时间:2015-03-04 10:28:02

标签: matlab image-processing

我目前正在尝试在MatLab中编写一个循环每个像素的函数,获取围绕它的半径内像素的平均强度,然后将该强度应用于中心像素,有效地模糊图像。 / p>

我首先声明函数并找到图像的最大宽度和高度,nxny

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;一定有问题,但我无法找出它是什么。

有人能看出为什么会出错吗?

0 个答案:

没有答案