2013-01-13 65 views
0

我有大约200次CT扫描,我需要在-2048和2048之间限制它们的强度值。我尝试了histeq和imadjust,但它们没有奏效。当我使用imshow时(图像,[-2048,2048]),我得到最好的结果。但我需要保存此imshow的结果数据。MatLAB:图像的极限强度值

imshow result without display range

imshow result with display range

欲获得imshow的输出图像用的显示范围,并能够储存吗?

最佳

+0

什么是你输入CT扫描的范围值的信息?你能提供你为'histeq'和'imadjust'尝试的确切代码吗?为什么你不满意这些结果? **你在“imshow”**中究竟显示负强度? – Shai

+0

@Shai:'imshow'将强度图从最小范围映射到颜色映射到最大范围 - 在当前情况下,-2048对应于黑色,2048对应白色并设置极限。 – Jonas

+0

对于不是标准灰度或RGB的数据,您可以使用imagesc()来显示它。 –

回答

2

如果你想要做的是限制以同样的方式imshow做它该值的范围,你可以写

limits = [-2048 2048]; 
limitedImage = min(max(originalImage, limits(1)), limits(2)); 

这将设置所有强度低于-2048到 - 2048以及2048至2048之间的所有强度。

0

正如@Jonas所建议的,您可能想要截断极端值。 或者,您可以重新调整颜色以确保始终充分利用整个光谱(具有最大对比度)。

scaledImage = zeros(size(originalImage)) % Just for initialization 
desiredRange = 2*2048; 
currentRange = max(originalImage(:)) - min(originalImage(:)); % You will want to remove NaNs first if they occur 
currentMean = mean(originalImage(:)) 
scaledImage(:) = currentMean + (originalImage(:) - currentMean) * desiredRange /currentRange 

这将设置比-2048到-2048下所有强度,高于2048所有的强度到2048

0

你也可以使用一些功能是有限的,单调。

例如。我会使用类似limitedImage = 2048*tanh(originalImage/2048)

使用这个你可以恢复原始图像,并且不会失去超过2048