在图像的局部区域中对比度拉伸

时间:2013-03-12 21:44:51

标签: matlab opencv image-processing contrast

我想对图像进行对比度拉伸。图像如图所示(数据提示由我在MATLAB中创建,以提供有关图像的更多信息,图像上已存在时间戳)。

enter image description here

现在,已经描述了如何执行对比度拉伸here。但是,自imgMin=0imgMax=255以来,该公式无法使用。因此图像将保持不变。所以我的解决方法是局部对比度拉伸。我不确定如何做到这一点(也相对较快,即我应该能够对比延伸视频帧并仍然实时播放视频。我尝试了直方图均衡,虽然它在OpenCV中产生实时结果,对比度拉伸不是令人印象深刻)。要了解算法是否有效,我也愿意使用MATLAB。

我还展示了数据提示,您可以在其中查看像素值。我先将彩色图像转换为灰度图像。简而言之,目标是白色通道应该变得更亮,尽管图像的最亮部分值为255(即太阳)。

2 个答案:

答案 0 :(得分:5)

使用较大的过滤器半径,您可能会使用细节增强过滤器获得所需的结果。细节增强的一个流行示例是Adobe Lightroom中的“清晰度”效果。这些算法的作用实际上相当于在本地增加对比度。

Guided Filter可以用于细节增强(参见链接纸的第10页),对于视频而言,它可能足够快,与更好的已知双边滤波器相比。它也相对容易实现,至少对于灰度图像或每通道操作。用于实验的Matlab代码是here,如果我没记错的话,它包含一个细节增强示例。

理论:粗略地说,我们的想法是将图像的高通滤波版本添加到原始图像中。如果使用小型高通内核执行此操作,则执行锐化操作,如果使用大内核(通过更多频率),则执行细节增强。当您使用简单的高通滤波器解决问题时,引导滤波器是一种避免在明亮的光线到暗边界处出现光晕伪影的聪明方法。

答案 1 :(得分:1)

如果您拥有全部颜色范围,我建议您决定您愿意“牺牲”多少像素,因为会有一些饱和度。您仍然可以使用对比度方程式(来自您的链接)

newValue = 255 * (oldValue - minValue)/(maxValue - minValue)

唯一的区别是您手动决定minValuemaxValue。这样minValue以下的所有内容都将为0;类似于255

升级 - 只需决定您愿意使用的百分比并自动设置边界。

编辑 - “本地”让我想到了一个“高级”版本。也许你可以看看直方图(256个分档),看看是否有一些“漏洞”。 假设您只有从0到50和从205到255的值。然后您可以将较低的值拉伸到100,将较高的值拉伸到155.唯一的问题是较低值和较高值之间的对比度较差。

相关问题