在MATLAB中增加图像对比度

时间:2011-08-02 03:32:25

标签: matlab image-processing

我有一个灰度图像,其像素值范围为1.000到1.003。

我想增加不同像素之间的对比度。我在imcontrast下尝试了imtool,但我没有看到任何改善。

也许一个想法是增加像素值> 1.000。例如,如果我可以将1.001到10,1.002到20等映射就会很棒。这会增加对比度吗?

4 个答案:

答案 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;

然后,你仍然需要注意图像可能是空白的(这会导致被零除的问题)。

如果您想要放大的理想范围不是真正的最小值或最大值,则可以手动设置imgMinimgMax值。

答案 1 :(得分:5)

我意识到这并不是这里所要求的,但问题的标题可能会引导其他人,像我一样,来到这里寻求一种方法(非破坏性地)增加图像中的对比度它是标准化的 - 类似于Photoshop中的曲线功能,可以将其设置为sigmoid形状:

sigmoid curve on photoshop

一种简单的方法(假设我们在[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])的内容来显示图像。