我有一个灰度图像,其像素值范围为1.000到1.003。
我想增加不同像素之间的对比度。我在imcontrast
下尝试了imtool
,但我没有看到任何改善。
也许一个想法是增加像素值> 1.000。例如,如果我可以将1.001到10,1.002到20等映射就会很棒。这会增加对比度吗?
答案 0 :(得分:11)
尝试
newRange = 1.0; %// choose the new maximum. (new minimum always at 0.0)
imgMin = double(min(image(:)));
imgMax = double(max(image(:)));
image = (image - imgMin) / (imgMax - imgMin) * newRange;
然后,你仍然需要注意图像可能是空白的(这会导致被零除的问题)。
如果您想要放大的理想范围不是真正的最小值或最大值,则可以手动设置imgMin
和imgMax
值。
答案 1 :(得分:5)
我意识到这并不是这里所要求的,但问题的标题可能会引导其他人,像我一样,来到这里寻求一种方法(非破坏性地)增加图像中的对比度它是标准化的 - 类似于Photoshop中的曲线功能,可以将其设置为sigmoid形状:
一种简单的方法(假设我们在[0,1]
范围内有一个标准化的图像,例如在通过MATLAB的mat2gray
函数之后)是使用余弦函数。这是如何:我们首先反映余弦曲线,使其最低点为零,最高点为π,而不是相反;然后我们将输入缩放π,以便当输入具有其最大值1时出现最高点;最后我们将结果标准化为输出范围[0,1]
(来自余弦的原始[-1,1]
),加1并除以2.结果是下面的简单公式:
img_contrast = ( -cos( pi * mat2gray( img_original ) ) + 1 ) / 2;
希望有所帮助!
答案 2 :(得分:1)
如果您只想显示对比度更高的图像,那么您可以使用imagesc
将图像数据缩放到当前色彩映射的整个范围并显示图像。
如果您确实想要调整图像的范围,可以通过减去最小值并除以可用范围来对其进行标准化。
答案 3 :(得分:0)
如果您使用imshow(image, [lowerBound upperBound])
来显示图片,则它应显示为lowerBound
(显示为黑色)和upperBound
(显示为白色)之间的线性缩放。因此,对于您的示例,您可以使用类似imshow(image, [1.000 1.003])
的内容来显示图像。