『youcans 的 OpenCV 例程300篇 - 总目录』

【youcans 的 OpenCV 例程300篇】47. 直方图处理之直方图匹配

图像直方图是反映图像像素分布的统计表。 灰度直方图是图像灰度级的函数,用来描述每个灰度级在图像矩阵中的像素个数。

直方图均衡直接对图像全局进行均衡化,生成具有均匀直方图的图像,并不考虑局部图像区域的具体情况。对于一幅图像的局部区域、具体缺陷,有时需要生成具有特殊形状直方图的图像。

直方图匹配又称为直方图规定化,是指将图像的直方图调整为规定的形状。 例如,将一幅图像或某一区域的直方图匹配到另一幅影像上,使两幅影像的色调保持一致。

这就需要在直方图均衡的基础上,再进行一次反变换,将均匀形状的直方图调整为规定的形状。

直方图匹配的主要步骤为:

(1)通过规定图像 z 的直方图 pz(z)p_z(z)pz​(z),计算其直方图均衡变换的 sks_ksk​;

(2)通过 sks_ksk​ 计算图像 z 的直方图均衡变换函数 GGG,G(zq)=skG(z_q)=s_kG(zq​)=sk​;

(3)计算变换函数 GGG 的逆变换函数 G−1G^{-1}G−1,zq=G−1(sk)z_q=G^{-1}(s_k)zq​=G−1(sk​);

(4)对输入图像 r 进行直方图均衡得到均衡图像 s,然后再用逆变换函数 G−1G^{-1}G−1 将其映射到 pz(z)p_z(z)pz​(z),得到直方图匹配图像 z。本步骤中的两次变换,也可以合并为一次完成。

例程:1.59 灰度图像直方图匹配

    # 1.59 灰度图像直方图匹配img = cv2.imread("../images/imgGaia.tif", flags=0)  # flags=0 读取为灰度图像imgRef = cv2.imread("../images/Fig0307a.tif", flags=0)  # 匹配模板图像, matching template# imgOut = calcHistMatch(img, imgRef)  # 子程序:直方图匹配# 计算累计直方图histImg, bins = np.histogram(img.flatten(), 256)  # 计算原始图像直方图histRef, bins = np.histogram(imgRef.flatten(), 256)  # 计算匹配模板直方图cdfImg = histImg.cumsum()  # 计算原始图像累积分布函数 CDFcdfRef = histRef.cumsum()  # 计算匹配模板累积分布函数 CDF# 计算直方图匹配转换函数transM = np.zeros(256)for i in range(256):index = 0vMin = np.fabs(cdfImg[i] - cdfRef[0])for j in range(256):diff = np.fabs(cdfImg[i] - cdfRef[j])if (diff < vMin):index = int(j)vMin = difftransM[i] = index# 直方图匹配# imgOut = np.zeros_like(img)imgOut = transM[img].astype(np.uint8)fig = plt.figure(figsize=(10,7))plt.subplot(231), plt.title("Original image"), plt.axis('off')plt.imshow(img, cmap='gray')  # 原始图像plt.subplot(232), plt.title("Matching template"), plt.axis('off')plt.imshow(imgRef, cmap='gray')  # 匹配模板plt.subplot(233), plt.title("Matching output"), plt.axis('off')plt.imshow(imgOut, cmap='gray')  # 匹配结果histImg, bins = np.histogram(img.flatten(), 256)  # 计算原始图像直方图plt.subplot(234, yticks=[]), plt.bar(bins[:-1], histImg)histRef, bins = np.histogram(imgRef.flatten(), 256)  # 计算匹配模板直方图plt.subplot(235, yticks=[]), plt.bar(bins[:-1], histRef)histOut, bins = np.histogram(imgOut.flatten(), 256)  # 计算匹配结果直方图plt.subplot(236, yticks=[]), plt.bar(bins[:-1], histOut)plt.show()

(本节完)


版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/125112487)
Copyright 2022 youcans, XUPT
Crated:2021-11-18

【OpenCV 例程300篇】47. 直方图处理之直方图匹配相关推荐

  1. 【youcans的OpenCV例程300篇】总目录

    版权声明: 转载本系列作品时必须标注以下版权内容: [youcans@qq.com, youcans的OpenCV 例程300篇, https://blog.csdn.net/youcans/cate ...

  2. 【OpenCV 例程200篇】49. 图像增强—局部直方图处理

    [OpenCV 例程200篇]49. 图像增强-局部直方图处理 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 图像直 ...

  3. 【OpenCV 例程200篇】48. 图像增强—彩色直方图匹配

    [OpenCV 例程200篇]48. 图像增强-彩色直方图匹配 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 图像直 ...

  4. 【OpenCV 例程300篇】40. 图像分段线性灰度变换

    『youcans 的 OpenCV 例程300篇 - 总目录』 [youcans 的 OpenCV 例程300篇]40. 图像分段线性灰度变换 分段线性变换函数可以增强图像各部分的反差,增强感兴趣的灰 ...

  5. 【OpenCV 例程 300篇】222. 特征提取之弗里曼链码(Freeman chain code)

    OpenCV 例程200篇 总目录 [youcans 的 OpenCV 例程 300篇]222. 特征提取之弗里曼链码(Freeman chain code) 目标特征的基本概念 通过图像分割获得多个 ...

  6. 【OpenCV 例程300篇】206. Photoshop 色阶调整算法

    OpenCV 例程200篇 总目录 201. 图像的颜色空间转换 202. 查表快速替换(cv.LUT) 203. 伪彩色图像处理 204. 图像的色彩风格滤镜 205. 调节色彩平衡/饱和度/明度 ...

  7. 【OpenCV 例程 300篇】241. 尺度不变特征变换(SIFT)

    『youcans 的 OpenCV 例程300篇 - 总目录』 [youcans 的 OpenCV 例程 300篇]241. 尺度不变特征变换(SIFT) 6.4.1 简介 尺度不变特征转换算法(Sc ...

  8. 【OpenCV 例程300篇】207. Photoshop 色阶自动调整算法

    OpenCV 例程200篇 总目录 201. 图像的颜色空间转换 202. 查表快速替换(cv.LUT) 203. 伪彩色图像处理 204. 图像的色彩风格滤镜 205. 调节色彩平衡/饱和度/明度 ...

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

    『youcans 的 OpenCV 例程200篇 - 总目录』 [youcans 的 OpenCV 例程 300篇]221.加密马赛克图像处理与解密复原 9. 图像的马赛克处理 马赛克效果是广泛使用的 ...

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

    OpenCV 例程200篇 总目录 [youcans 的 OpenCV 例程 300篇]219. 添加数字水印(盲水印) 8.2 添加数字盲水印 数字水印,是指将特征信息嵌入音频.图像或是视频等数字信 ...

最新文章

  1. 从小护士到微软中国总经理,逆风飞扬的“打工皇后”吴士宏的传奇人生
  2. Canvas绘图在微信小程序中的应用:生成个性化海报
  3. matlab里面板有什么作用,MATLAB轻松享受GPU的强大功能
  4. 实战Jquery(一)--username校验
  5. 数字图像处理之图像边缘
  6. 数组乱码_python 爬虫随笔-土办法治乱码
  7. Network-Monitor项目中观察者模式解析
  8. php前段时间戳转字符串,JavaScript_js获取时间并实现字符串和时间戳之间的转换,废话少说,直接上代码 复制 - phpStudy...
  9. GAN手写体生成(MINIST)
  10. 16.[个人]C++线程入门到进阶(16)----线程函数:CreateThread与_beginthread
  11. 处理器仿存带宽_《CPU与内存的带宽搭配》
  12. QtCharts:给QChartView换肤,换背景色添加背景图片
  13. 【Python数据科学】多表关联 merge、join、concat
  14. hystrix 配置了较大的核心线程数导致wating线程过多的问题
  15. 个人总结:京东技术体系员工级别划分及薪资区间
  16. 万豪、希尔顿、凯悦、万达、首旅如家旗下酒店年末扎堆开业 | 中国酒店业周刊...
  17. 深入探索 Android 网络优化(一、网络筑基篇,为什么Flutter能最好地改变移动开发
  18. x86上 /proc/cpuinfo中的cpufreq和scaling_cur_freq怎么算
  19. tomcat7w.exe启动失败,未注册成服务,以及配置Tomcat系统环境变量
  20. 433~458(flex+携程网移动端首页)

热门文章

  1. 如何做出优质的Scratch作品
  2. 数控计算机辅助编程软件,Cimatron数控编程软件
  3. edgewin10无法安装_win10内置Edge浏览器遇到“您未安装FLASH控件”如何解决
  4. 补单平台哪个靠谱 天猫补单哪个安全
  5. DSkin的DSkinDataGridView控件滚动条拖动后位置不变
  6. 如何将CAD格式转成可以编辑的矢量图
  7. oracle卸载干净步骤
  8. PHP获取客户端IP的方法
  9. 浅谈HTTP中GET和POST请求方式的区别
  10. TCP/IP常见协议及协议号及端口号