访问和删除负像素

时间:2016-11-18 05:25:56

标签: image matlab image-processing signal-processing

如何解决从MRI切片(或任何图像)中去除负像素的问题?

此外,如果有人可以简要解释它们为什么会发生,那将会非常有帮助。

我已经阅读过许多在线参考资料,特别是那些关于MATLAB论坛的参考文献,但是它们似乎有不同的原因。

抱歉,我没有要发布的代码,因为我正在弄清楚我的方法。

3 个答案:

答案 0 :(得分:0)

MRI切片大概对我们来说只是一个图像,这也只是一个矩阵。由于表示图像的矩阵仅具有正值,因此负像素'也可以推测,意味着像素具有低于特定阈值的值。让我们来看看这样一个场景: load clown将一个矩阵X加载到您的工作区,代表一个小丑图片,首先看imagesc(X);colormap(gray);。如果要删除某些低于阈值的值,可以执行以下操作:

threshold=10;
newValue=0; 
X(find(X>threshold))=newValue;
imagesc(X)
colormap(gray) 

答案 1 :(得分:0)

假设例如以下图像矩阵:

>> Img = [-2, -1, 0, 1, 2];

您可以将所有负面元素设置为零:

>> ImgZeros = Img; 
>> ImgZeros(Img<0) = 0
ImgZeros =
 0     0     0     1     2

或对您有用的任何其他价值,例如NaN

>> ImgNans = Img;
>> ImgNans(Img<0) = nan 
ImgNans =
   NaN   NaN     0     1     2

您可以“移动”所有值,使最低负值变为零:

>> ImgZeroFloor = Img - min(Img(:))
ImgZeroFloor =
     0     1     2     3     4

您可以将整个事物转换为范围(0,1)中的灰度图像:

>> ImgGray = mat2gray(Img)
ImgGray =
     0    0.2500    0.5000    0.7500    1.0000

至于为什么你会得到负值,谁知道呢。这是特定的问题。 (如果我不得不猜测MRI,我会说这是由于从MRI信号到像素强度的转换过程中的数值不准确。)

答案 2 :(得分:0)

限制值的另一种方法是使用sigmoid函数

https://en.wikipedia.org/wiki/Sigmoid_function

可以缩放以使所有答案的范围从0到255 它可以用来限制原始数据平衡的峰值。 它经常用于神经网络。