在MATLAB中增加图像对比度

fla*_*hon 3 matlab image-processing

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

我想增加不同像素之间的对比度.我曾尝试imcontrastimtool,但我没有看到任何改善视觉.

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

rwo*_*ong 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;
Run Code Online (Sandbox Code Playgroud)

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

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


wal*_*ous 5

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

在photoshop上的S形曲线

一个简单的方法(假设我们在[0,1]范围内规范化了一个图像,例如在通过MATLAB mat2gray函数之后)是使用余弦函数.这是如何:我们首先反映余弦曲线,使其最低点为零,最高点为π,而不是相反; 然后我们将输入缩放π,以便当输入具有其最大值1时出现最高点; 最后我们将结果标准化为输出范围[0,1](来自余弦的原始值[-1,1]),加1并除以2.结果是下面的简单公式:

img_contrast = ( -cos( pi * mat2gray( img_original ) ) + 1 ) / 2;
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!