【OpenCV 例程200篇】208. Photoshop 对比度自动调整算法

OpenCV 例程200篇 总目录


【youcans 的 OpenCV 例程200篇】208. Photoshop 对比度自动调整算法

对比度是指图像中明暗区域最亮的白和最暗的黑之间不同亮度层级的测量,差异范围越大代表对比越大。 当对比率达到 120:1 就可以容易地显示生动、丰富的色彩,对比率高达 300:1 时就可支持各阶的颜色。

对比度对视觉效果的影响非常关键。高对比度对于图像的清晰度、细节表现、灰度层次表现都有很大帮助。

对比度调整的目的通常是增强对比度,形成清晰的图像效果和醒目的视觉冲击力。

Photoshop 提供了自动对比度调整功能(AutoContrast),通过自动将图像最深的颜色加强为黑色,最亮的部分加强为白色,以增强图像的亮度和暗度的对比度。

Photoshop 中的自动对比度调整算法,与自动色阶调整算法基本相同,区别在于对比度自动调整不是对三个通道分别调整,而是对各通道按统一的比例进行调整。首先获取图像的亮度信息,然后根据修剪比例对亮度进行动态范围的拉伸,同比例调整 R,G,B 三个通道,因此不会出现色偏问题。

Enhance Monochromatic Contrast
Clips all channels identically. This preserves the overall color relationship while making highlights appear lighter and shadows appear darker. The Auto Contrast command uses this algorithm.

参考文献: Set Auto adjustment options (adobe.com)

在这里插入图片描述

输入色阶调整,先根据黑场阈值和白场阈值对图像的动态范围进行线性拉伸,再根据灰场调节值进行伽马变换,对发白(曝光过度)或过暗(曝光不足)进行矫正。

V1={0,Vin<Sin255,Vin>Hin255∗(Vin−Sin)/(Hin−Sin),elseV2=255∗(V1/255)1/M\begin{aligned} & V_1 = \begin{cases} 0 &, V_{in}<S_{in} \\ 255 &, V_{in}>H_{in} \\ 255 * {(V_{in}-S_{in})}/{(H_{in}-S_{in})} &, else \end{cases} \\ \\ & V_2 = 255 * (V_1 / 255)^{1/M} \end{aligned} V1=0255255(VinSin)/(HinSin),Vin<Sin,Vin>Hin,elseV2=255(V1/255)1/M

输出色阶调整是基于动态范围进行线性拉伸:

Vout={0,V2<0255,V2>255Sout+(Hout−Sout)∗V2∗/255,elseV_{out} = \begin{cases} 0 &, V_{2}<0 \\ 255 &, V_{2}>255 \\ S_{out} + {(H_{out}-S_{out})} * V_2 */255 &, else \end{cases} Vout=0255Sout+(HoutSout)V2/255,V2<0,V2>255,else


例程 14.15:Photoshop 对比度自动调整算法

本例程实现 Photoshop 的对比度自动调整算法,对三个通道同时调整。

    # 14.15 Photoshop 对比度自动调整算法def autoLevels(img, cutoff=0.1):  # 自动色阶调整channels = img.shape[2]  # h,w,chtable = np.zeros((1,256,3), np.uint8)for ch in range(channels):# cutoff=0.1, 计算 0.1%, 99.9% 分位的灰度值low = np.percentile(img[:,:,ch], q=cutoff)  # ch 通道, cutoff=0.1, 0.1 分位的灰度值high = np.percentile(img[:,:,ch], q=100 - cutoff)  # 99.9 分位的灰度值, [0, high] 占比99.9%# 输入动态线性拉伸Sin = min(max(low, 0), high - 2)  # Sin, 黑场阈值, 0<=Sin<HinHin = min(high, 255)  # Hin, 白场阈值, Sin<Hin<=255difIn = Hin - SinV1 = np.array([(min(max(255*(i-Sin)/difIn, 0), 255)) for i in range(256)])# 灰场伽马调节gradMed = np.median(img[:,:,ch])  # 拉伸前的中值Mt = V1[int(gradMed)] / 128.  # 拉伸后的映射值V2 = 255 * np.power(V1/255, 1/Mt)  # 伽马调节# 输出线性拉伸Sout, Hout = 5, 250  # Sout 输出黑场阈值, Hout 输出白场阈值difOut = Hout - Souttable[0, :, ch] = np.array([(min(max(Sout + difOut*V2[i]/255, 0), 255)) for i in range(256)])return cv.LUT(img, table)def autoContrast(img, cutoff):  # 自动对比度调整gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)  # 转换为灰度图像# 计算 0.1%, 99.9% 分位的灰度值Sin = np.percentile(gray, q=cutoff)  # cutoff=0.1, 0.1 分位的灰度值Hin = np.percentile(gray, q=100 - cutoff)  # 99.9 分位的灰度值, [0, per999] 占比99.9%# 输入动态线性拉伸difIn = Hin - SinV1 = np.array([(min(max(255 * (i-Sin)/difIn,0), 255)) for i in range(256)])# 灰场伽马调节, Mt: 0.01~9.99gradMed = np.median(gray)  # 拉伸前的中值Mt = V1[int(gradMed)] / 160.  # 拉伸后的映射值V2 = 255 * np.power(V1/255, 1/Mt)  # 伽马调节# 输出线性拉伸Sout, Hout = 5, 250  # Sout 输出黑场阈值, Hout 输出白场阈值difOut = Hout - Souttable = np.array([(min(max(Sout + difOut*V2[i]/255, 0), 255)) for i in range(256)]).astype("uint8")imgTone = cv.LUT(img, table)return imgTone# Photoshop 自动对比度调整算法img = cv.imread("../images/Fig0310b.tif", flags=1)  # 读取彩色图像# img = cv.imread("../images/demist02.png", flags=1)  # 读取彩色图像# 色阶自动调整cutoff = 0.1  # 截断比例, 建议范围 [0.0,1.0]levelsAuto = autoLevels(img, cutoff)# 对比度自动调整cutoff = 0.1  # 截断比例, 建议范围 [0.0,1.0]contrastAuto = autoContrast(img, cutoff)plt.figure(figsize=(9, 6))plt.subplot(131), plt.title("Origin"), plt.axis('off')plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB))plt.subplot(132), plt.title("AutoLevels"), plt.axis('off')plt.imshow(cv.cvtColor(levelsAuto, cv.COLOR_BGR2RGB))plt.subplot(133), plt.title("AutoContrast"), plt.axis('off')plt.imshow(cv.cvtColor(contrastAuto, cv.COLOR_BGR2RGB))plt.tight_layout()plt.show()

在这里插入图片描述


在这里插入图片描述

例程运行结果的上图接近灰度图像,色阶自动调整与对比度自动调整的效果类似,没有明显的区别。而在下图中出,色阶自动调整由于对 R/G/B 三个通道单独进行调整,出现了明显的色偏问题;而对比度自动调整则不会发生色偏。



【本节完】

版权声明:
参考文献: Use the Photoshop Levels adjustment (adobe.com)
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/125389684)
Copyright 2022 youcans, XUPT
Crated:2022-6-20
欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中
欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中

201. 图像的颜色空间转换
202. 查表快速替换(cv.LUT)
203. 伪彩色图像处理
204. 图像的色彩风格滤镜
205. 调节色彩平衡/饱和度/明度
206. Photoshop 色阶调整算法
207. Photoshop 色阶自动调整算法
208. Photoshop 对比度自动调整算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java设计模式 外观,精掌握Java设计模式之外观模式(10)

定义通俗地解释&#xff0c;当你打开灯的时候&#xff0c;你只需要嗯一下开关就好了&#xff0c;不需要关心灯泡亮起来的这个流程&#xff0c;同理&#xff0c;打开电脑的时候&#xff0c;嗯一下开机键就好了&#xff0c;也不需要关心电脑是先运行cpu还是内核之类的。这样能让用…

【OpenCV 例程200篇】209. HSV 颜色空间的彩色图像分割

OpenCV 例程200篇 总目录 【youcans 的 OpenCV 例程200篇】209. HSV 颜色空间的彩色图像分割 5.1 HSV 颜色空间的彩色图像分割 HSV 模型是针对用户观感的一种颜色模型。 HSV 颜色空间的各通道分别表示色调&#xff08;Hue&#xff09;、饱和度&#xff08;Saturation&#x…

【OpenCV 例程200篇】210. 绘制直线也会有这么多坑?

OpenCV 例程200篇 总目录 【youcans 的 OpenCV 例程200篇】210. 绘制直线也会有这么多坑&#xff1f; 我不是标题党。 绘制直线当然是最简单的绘图&#xff0c;能有什么坑呢&#xff1f;不信的同学可以直接跳到注意事项。就算你是 OpenCV 大神&#xff0c;如果这 10 个问题点…

PHP配置微信测试号,关于微信开发模式和测试账号

自己刚开始学习微信开发&#xff0c;请帮忙解惑1.微信公众号使用模式分为编辑模式和开发者模式 &#xff0c;两个是互斥的&#xff0c;也就是开启一个另一个就不能用现在我的理解 上边两个模式是由服务器的开启停用区分的&#xff0c;启用即为开发者模式另外&#xff0c;我想知…

【OpenCV 例程200篇】211. 绘制垂直矩形

OpenCV 例程200篇 总目录 【youcans 的 OpenCV 例程200篇】211. 绘制垂直矩形 7.1 绘图函数基本参数 OpenCV提供了绘图功能&#xff0c;可以在图像上绘制直线、矩形、圆、椭圆等各种几何图形。 函数 cv.line()、cv.rectangle()、cv.circle()、cv.polylines() 等分别用来在图…

php自动采集入库,Phpcms v9自动采集入库自动发布组件

Phpcms v9自动采集入库自动发布组件是思优CMSYOU技术团队在实际SEO运维运用总结研究出的自动采集入库自动发布文章的组件&#xff0c;实现自动通过Phpcms后台采集模块的采集规则采集文章、并自动入库到对应栏目、入口后自动更新生成内容页自身HTML、栏目页HTML、首页HTML&#…

【OpenCV 例程200篇】212. 绘制倾斜的矩形

OpenCV 例程200篇 总目录 【youcans 的 OpenCV 例程200篇】212. 绘制倾斜的矩形 7.1 绘图函数基本参数 OpenCV提供了绘图功能&#xff0c;可以在图像上绘制直线、矩形、圆、椭圆等各种几何图形。 函数原型&#xff1a; 函数 cv.rectangle() 用来在图像上绘制垂直于图像边界的…

CSDN 技能树使用体验与产品分析(1)

文章目录1. 什么是技能树2. 技能树的产品结构3. 技能树的使用3.1 产品入口3.2 知识点的模块设置3.3 『练习题』模块3.4 『参考资料』模块3.5 『讨论区』与『笔记』模块4. 结束语C 站近期隆重推出了一个新产品『技能树』&#xff0c;这是一个很好的方向。 很早就想写一篇介绍和…

【OpenCV 例程200篇】213. 绘制圆形

OpenCV 例程200篇 总目录 【youcans 的 OpenCV 例程200篇】213. 绘制圆形 7.1 绘图函数基本参数 OpenCV提供了绘图功能&#xff0c;可以在图像上绘制直线、矩形、圆、椭圆等各种几何图形。 7.3 绘制圆形 函数原型&#xff1a; 函数 cv.circle() 用来在图像上绘制圆形。 cv…

【OpenCV 例程200篇】214. 绘制椭圆的参数详解

OpenCV 例程200篇 总目录 【youcans 的 OpenCV 例程200篇】214. 绘制椭圆的参数详解 OpenCV提供了绘图功能&#xff0c;可以在图像上绘制直线、矩形、圆、椭圆等各种几何图形。 7.4 绘制椭圆 函数原型&#xff1a; 函数 cv.ellipse() 用来在图像上绘制椭圆轮廓、填充椭圆、椭…

【OpenCV 例程200篇】215. 基于多段线绘制近似椭圆

OpenCV 例程200篇 总目录 【youcans 的 OpenCV 例程200篇】215. 基于多段线绘制近似椭圆 如果需要对椭圆渲染进行更多控制&#xff0c;或者绘制粗略的椭圆边界&#xff0c;可以使用 cv.ellipse2Poly 检索曲线&#xff0c;然后使用多段线进行渲染或使用fillPoly进行填充。 函数…

【OpenCV 例程200篇】216. 绘制多段线和多边形

专栏地址&#xff1a;『youcans 的 OpenCV 例程200篇』 文章目录&#xff1a;『youcans 的 OpenCV 例程200篇-总目录』 【youcans 的 OpenCV 例程200篇】216. 绘制多段线和多边形 函数 cv.polylines() 用来绘制多边形曲线或多段线。 函数 cv.fillPoly() 用来绘制一个或多个填充…

【OpenCV 例程200篇】217. 鼠标交互获取多边形区域(ROI)

OpenCV 例程200篇 总目录 【youcans 的 OpenCV 例程200篇】217. 鼠标交互获取多边形区域 函数 cv.selectROI 可以通过鼠标在图像上选择感兴趣的矩形区域&#xff08;ROI&#xff0c;region of interest&#xff09;。 如果要通过鼠标在图像上选择感兴趣的多边形区域&#xff0c…

【OpenCV 例程200篇】218. 多行倾斜文字水印

OpenCV 例程200篇 总目录 【youcans 的 OpenCV 例程200篇】218. 多行倾斜文字水印 8.1 添加多行倾斜文字水印 水印是叠加在图像上的标志、签名、文本或图案&#xff0c;用于保护图像的版权。 先在黑色背景上添加图像或文字制作水印&#xff0c;再使用 cv.addWeight 函数&…

【OpenCV 例程200篇】219. 添加数字水印(盲水印)

OpenCV 例程200篇 总目录 【youcans 的 OpenCV 例程200篇】219. 添加数字水印&#xff08;盲水印&#xff09; 8.2 添加数字盲水印 数字水印&#xff0c;是指将特征信息嵌入音频、图像或是视频等数字信号中。 数字水印分为明水印和盲水印&#xff08;blind watermark&#x…

搜索栏联想词提示

在我们需要游览一些网站的时候&#xff0c;我们经常需要使用搜索引擎来进行搜索&#xff0c;无论是百度谷歌还是搜狐等&#xff0c;我们都需要在搜索栏中输入相关的搜索词&#xff0c;当我们点击进行输入的时候&#xff0c;下面会给出许许多多的提示词&#xff0c;程序自动联想…

【OpenCV 例程200篇】220.对图像进行马赛克处理

文章目录&#xff1a;『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】220.对图像进行马赛克处理 9. 图像的马赛克处理 马赛克效果是广泛使用的图像和视频处理方法。将图像中指定区域的色阶细节劣化&#xff0c;造成色块模糊的效果&#xff0c;看上…

【OpenCV 例程200篇】223. 特征提取之多边形拟合(cv.approxPolyDP)

『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】223. 特征提取之多边形拟合 目标特征的基本概念 通过图像分割获得多个区域&#xff0c;得到区域内的像素集合或区域边界像素集合。我们把感兴趣的人或物称为目标&#xff0c;目标所处的区域就是目标…

Eclipse快捷键生成语句

当我们使用Eclipse进行项目的开发的时候&#xff0c;有的时候我们需要重复输入main方法和输出语句等&#xff0c;下面就教给大家如何在Eclipse开发中使用快捷键生长main方法和输出语句。 快捷键生成语句 生成main方法&#xff1a;输入"main" &#xff0c;按ALT/&…

【OpenCV 例程200篇】221.加密马赛克图像处理与解密复原

『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】221.加密马赛克图像处理与解密复原 9. 图像的马赛克处理 马赛克效果是广泛使用的图像和视频处理方法。将图像中指定区域的色阶细节劣化&#xff0c;造成色块模糊的效果&#xff0c;看上去像是一个个…