如何解决从MRI切片(或任何图像)中去除负像素的问题?
此外,如果有人可以简要解释它们为什么会发生,那将会非常有帮助。
我已经阅读过许多在线参考资料,特别是那些关于MATLAB论坛的参考文献,但是它们似乎有不同的原因。
抱歉,我没有要发布的代码,因为我正在弄清楚我的方法。
答案 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 它可以用来限制原始数据平衡的峰值。 它经常用于神经网络。