对比度增强(二):直方图正规划与伽马变换 cv.normal()函数使用及原理

 直方图正规化:

图像为I,宽为W,高为H,I(r,c)代表I的第r行第c列的灰度值;输出图像记为O,为使得输出图像的灰度值在[Omin,Omax]范围里,可用如下公式:

 

                                                                  (1)

                (2)

 

其中0≤r<H,0≤c<W。公式(1)是一个比列关系,变换后可为公式(2),即可求输出图像O(r,c)。 

 

而Imin与Omin对应,此点(Imin,Omin)在线性方程上,则斜率:

              

 

           将 (Imin,Omin)带入线性方程中, b值:

 

          

 

 

该方程变成:         

 

 

 最终可为: 

 

 正规化自己编写与使用normalize函数代码如下:

 normalize函数代码:

import numpy as np
import cv2 as cv

src=np.array([[1,2,3],[4,5,6]])
b=np.zeros((2,3))
# c=cv.normalize(src,dst=b,alpha=4,beta=0,norm_type=cv.NORM_L1) # L1范数
# c=cv.normalize(src,dst=b,alpha=4,beta=0,norm_type=cv.NORM_L2) # L2范数
# c=cv.normalize(src,dst=b,alpha=4,beta=0,norm_type=cv.NORM_INF) # 无穷范数
c=cv.normalize(src,b,20,255,norm_type=cv.NORM_MINMAX)
print('c=',c)

自己编写代码:
# 原始图像
IMAX=np.max(src)
IMIN=np.min(src)
OMIN,OMAX=20,255
A=float(OMAX-OMIN)/(IMAX-IMIN)
B=OMIN-A*IMIN
O=A*src+B
print('O=',O)

 其验证结果,如下:

 

 L1范数:图像矩阵中值的绝对值的和(L1)

 L2范数:图像矩阵中值的平方和的开发(L2)

无穷范数:图像矩阵中值的绝对值的最大值(L3)

求得值简称:L

所有公式可表示:

               

 

 

 

对应代码:dst=cv.normalize(src,dst,alpha=1,beta=0,norm_type=cv.NORM_L1)

 

 伽马变换:

             0≤r<H,0≤c<W

 

当 =1时,图像不变。如果图像整体或者感兴趣区域较暗,则令0<<1可以增加图像对比度;相反,如果图像整体或者感兴趣区域较亮,则>1可以降低图像对比度。

 

posted @   tangjunjun  阅读(931)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
https://rpc.cnblogs.com/metaweblog/tangjunjun
点击右上角即可分享
微信分享提示