将像素的强度值转换为整数

时间:2015-02-26 15:41:31

标签: matlab image-processing

我目前正处理一段代码,它采用中心像素(x,y)和半径r,然后找到该圆形样本中每个像素的平均强度。

到目前为止,这是我的代码:

function [average] = immean(x, y, r, IMAGE)

%Initialise the variables, total and pixelcount, which will be used to
%collect the sum of the pixel intensities and the number of pixels used to
%create this total.

total = 0;   
pixelcount = 0;

%Find the maximum width, nx, and maximum height, ny, of the image - so that
%it can be used to end the for-loop at the appropriate positions.

[nx ny] = size(IMAGE);

%Loop through all pixels and check whether each one falls within the range
%of the circle (specified by its x-and-y-coordinates and its radius, r).

%If a pixel does fall within that domain, its intensity is added to the
%total and the pixelcount increments.

for i = 1:nx
  for j = 1:ny
 if (x-i)^2 + (y-j)^2 <= r^2
     total = total + IMAGE(i, j);
     pixelcount = pixelcount + 1;
  end 
end
end

然而,问题是,当我打印出total时,我不断得到值255.我认为这是因为MatLab知道像素的最大强度是255,所以它会阻止{{1从大于那个。那么如何将此像素强度转换为普通整数,以便MatLab不会将total限制为255?

1 个答案:

答案 0 :(得分:3)

根据Divakar的评论,您选择double主要是为了提高位精度,以及MATLAB以这种方式自然地处理数组。此外,当您获取事物的平均值时,您还想要具有浮点精度,因为找到某些事物的平均值将不可避免地为您提供浮点值。

我有点困惑为什么你不想在平均值之后保持小数点,特别是在准确性方面。但是,这不是一个关于意图的问题,但这是一个问题,即你想要做什么,并在你的问题中提出。因此,如果您不想要小数点,只需将图像转换为高于8位的整数精度,以避免剪切。像uint32之类的东西,这样你得到一个32位无符号整数,甚至是64位无符号整数的uint64。要最小化剪裁,请转换为uint64。因此,只需:

IMAGE = uint64(IMAGE);

在进行任何处理之前,请在函数开头执行此操作。