OpenCV图像增强——通过扩展灰度范围来增加对比度

通过扩展灰度范围来增加对比度,目的是为了更好地分割目标与背景。(对灰度图进行指定范围的灰度值进行线性变换)

设m,n分别为图像的行数和列数,f(m,n)为原图像的灰度值,g(m,n)为目标图像的灰度值
k为斜率,k=255/(b-a),[a,b]为需要转换的灰度区间。
过程:对[a,b]灰度区间的像素进行对比度增强,斜率k必大于1,在灰度区间[a,b]线性变换成[0,255],起到对比度增强的作用。在小于灰度值a的像素中统一设置为0(黑色),在大于灰度值b的像素中
同一设置为255(白色),目的是为了更好地分割目标与背景。
数学模型如下:

代码(OpenCV):(其中gray为原图的灰度图,gray_Contrast为目标图的灰度图)
for (int y = 0; y < gray.rows; y++)
{
for (int x = 0; x < gray.cols; x++)
{
if (gray.at<uchar>(y, x) < fa)
gray_Contrast.at<uchar>(y, x) = 0;
else if (gray.at<uchar>(y, x) >fb)
gray_Contrast.at<uchar>(y, x) = 255;
else
gray_Contrast.at<uchar>(y, x) = k*(gray.at<uchar>(y, x) - fa);
}
}
设定的目标物为

效果图:(其中窗口名为“src”的原图像窗口,“gray”为原图像的灰度图窗口命,“gray_Contrast2”为目标图窗口)

设定的a,b值分别为43,98

左边图为原灰度图,右边为目标灰度图( 注意不是二值图
由图可以看到,在比较暗的区域,仍能分割出目标与背景。
注意:以上所有的操作都是基于灰度图的处理

本人为新手,文章难免有错误,欢迎大家指出。同时,如果大家有好的目标与背景的分割方法,欢迎大家一起讨论。
### 图像对比度扩展增强方法概述 图像对比度扩展是一种常见的图像增强技术,其目的是通过拉伸或压缩灰度范围来提高视觉质量。以下是几种常用的对比度扩展方法及其具体实现方式: #### 1. 线性对比度扩展 线性对比度扩展通过对原始图像的灰度值进行简单的线性变换,从而扩大灰度级间的差异[^1]。假设输入图像的最小灰度值为 \( g_{\text{min}} \),最大灰度值为 \( g_{\text{max}} \),目标灰度范围为 [0, L-1],则可以通过以下公式完成线性映射: \[ f'(x,y) = \frac{(f(x,y)-g_{\text{min}})}{(g_{\text{max}}-g_{\text{min}})} \times (L-1) \] 这种方法简单高效,但在实际应用中可能无法有效处理动态范围较小的图像。 #### 2. 非线性对比度扩展 非线性对比度扩展通常采用幂律变换(Gamma校正)或其他非线性函数来调整图像亮度分布。对于伽马矫正,其基本形式如下: \[ f'(x,y) = c \cdot f(x,y)^{\gamma} \] 其中 \( c \) 和 \( \gamma \) 是可调参数,用于控制曲线形状和整体亮度变化。 这种技术适用于某些特定场景下的对比度优化,但可能会引入过亮或过暗区域的问题。 #### 3. 直方图均衡化 直方图均衡化是一种基于统计学的空间域方法,旨在重新分配像素强度以最大化整个图像的信息熵[^3]。该过程涉及累积概率密度函数(CDF) 的构建以及后续的逆映射操作。尽管传统全局直方图均衡化能够显著提升对比度,但它也可能导致细节丢失或者不自然的颜色失真现象发生。 针对上述局限性,提出了改进版——受限对比度自适应直方图均衡化(CL-AHE)[^2] ,它不仅考虑到了局部特性而且还加入了阈值机制防止过度放大噪声影响。 #### 4. 自适应对比度增强(ACE) 作为一种高效的局部对比度增强方案,ACE算法利用局部标准差作为衡量指标并据此调整每个像素点附近的增益因子 。相比起其他复杂的分块计算模式而言,此方法更加灵活简便,在保持边缘清晰的同时减少计算负担。 ```python import cv2 import numpy as np def linear_contrast_stretch(image): min_val = np.min(image) max_val = np.max(image) stretched_image = ((image - min_val) / (max_val - min_val)) * 255 return stretched_image.astype(np.uint8) # Example usage with OpenCV original_img = cv2.imread('input.jpg', cv2.IMREAD_GRAYSCALE) enhanced_img = linear_contrast_stretch(original_img) cv2.imwrite('output_linear_enhanced.jpg', enhanced_img) ``` 以上代码片段展示了如何使用Python中的OpenCV库执行基础的线性对比度拉伸功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值