【问题标题】:Increasing Image Contrast in MATLAB在 MATLAB 中增加图像对比度
【发布时间】:2011-08-02 03:32:25
【问题描述】:

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

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

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

【问题讨论】:

  • 当您有一个具有双值的灰度图像时,大多数函数都希望这些值位于[0.0,1.0] 范围内。因此,无论您如何转换强度(线性或非线性),您都应该考虑将结果映射到[0,1] 范围。

标签: matlab image-processing


【解决方案1】:

试试

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 值。

【讨论】:

    【解决方案2】:

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

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

    img_contrast = ( -cos( pi * mat2gray( img_original ) ) + 1 ) / 2;
    

    希望有帮助!

    【讨论】:

      【解决方案3】:

      如果您只想以更高的对比度显示图像,那么您可以使用 imagesc 将图像数据缩放到当前颜色图的整个范围并显示图像。

      如果你真的想调整图像的范围,你可以通过减去最小值并除以可用范围来标准化它。

      【讨论】:

        【解决方案4】:

        如果您使用imshow(image, [lowerBound upperBound]) 显示图像,它应该在lowerBound(将显示为黑色)和upperBound(将显示为白色)之间以线性比例显示。因此,对于您的示例,您可以使用 imshow(image, [1.000 1.003]) 之类的内容来显示您的图像。

        【讨论】:

          猜你喜欢
          • 2014-10-01
          • 2015-12-17
          • 2019-10-03
          • 2017-01-11
          • 2012-08-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多