直方图匹配又称为直方图规定化,是指将一幅图像的直方图变成规定形状的直方图而进行的图像增强方法。即将某幅影像或某一区域的直方图匹配到另一幅影像上。将图像的直方图分布规律与待匹配图像的脂肪分布规律近似。下面介绍两种方法:

1. 直方图匹配

def style_transfer(image, ref):

out = np.zeros_like(ref)

_, _, ch = image.shape

for i in range(ch):

print(i)

hist_img, _ = np.histogram(image[:, :, i], 256)

hist_ref, _ = np.histogram(ref[:, :, i], 256)

cdf_img = np.cumsum(hist_img)

cdf_ref = np.cumsum(hist_ref)

for j in range(256):

tmp = abs(cdf_img[j] - cdf_ref)

tmp = tmp.tolist()

idx = tmp.index(min(tmp)) # 找出tmp中最小的数,得到这个数的索引

out[:, :, i][ref[:, :, i] == j] = idx

return out

out = style_transfer(img, ref)

hist_img = cv2.calcHist([img], [0], None, [255], [0, 255])

hist_ref = cv2.calcHist([ref], [0], None, [255], [0, 255])

hist_out = cv2.calcHist([out], [0], None, [255], [0, 255])

plt.subplot(231)

plt.title("img")

plt.imshow(img)

plt.subplot(234)

plt.plot(hist_img)

plt.subplot(232)

plt.title("ref")

plt.imshow(ref)

plt.subplot(235)

plt.plot(hist_ref)

plt.subplot(233)

plt.title("out")

plt.imshow(out)

plt.subplot(236)

plt.plot(hist_out)

plt.show()

2. 针对灰度图优化

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ref_gray = cv2.cvtColor(ref, cv2.COLOR_BGR2GRAY)

hist = cv2.calcHist([gray], [0], None, [256], [0, 256])

hist_ref = cv2.calcHist([ref_gray], [0], None, [256], [0, 256])

# 计算累计直方图

out = np.zeros_like(img)

tmp_ref = 0.0

h_ref = hist_ref.copy()

for i in range(256):

tmp_ref += h_ref[i]

h_ref[i] = tmp_ref

tmp = 0.0

h_acc = hist.copy()

for i in range(256):

tmp += hist[i]

h_acc[i] = tmp

# 计算映射

diff = np.zeros([256, 256])

for i in range(256):

for j in range(256):

diff[i][j] = np.fabs(h_ref[j] - h_acc[i])

M = np.zeros(256)

for i in range(256):

index = 0

min = diff[i][0] # min = 1.

for j in range(256):

if (diff[i][j] < min):

min = diff[i][j]

index = int(j)

M[i] = index

out = M[gray].astype(np.float32)

hist_img = cv2.calcHist([img], [0], None, [255], [0, 255])

hist_ref = cv2.calcHist([ref], [0], None, [255], [0, 255])

hist_out = cv2.calcHist([out], [0], None, [255], [0, 255])

plt.subplot(231)

plt.title("img")

plt.imshow(img)

plt.subplot(234)

plt.plot(hist_img)

plt.subplot(232)

plt.title("ref")

plt.imshow(ref)

plt.subplot(235)

plt.plot(hist_ref)

plt.subplot(233)

plt.title("out")

plt.imshow(out)

plt.subplot(236)

plt.plot(hist_out)

plt.show()

python 直方图匹配_Python OpenCV 直方图匹配相关推荐

  1. python opencv 直方图均衡化_Python opencv—直方图/直方图均衡化/直方图比较,pythonopencv...

    import cv2 as cv import numpy as np from matplotlib import pyplot as plt ''' def plot_demo(image): # ...

  2. [Python图像处理] 三十七.OpenCV直方图统计两万字详解(掩膜直方图、灰度直方图对比、黑夜白天预测)

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  3. java通过模板匹配html,OpenCV模板匹配

    目标 在本教程中,您将学习如何:使用OpenCV功能matchTemplate()来搜索图像补丁和输入图像之间的匹配 使用OpenCV函数minMaxLoc()来查找给定数组中的最大值和最小值(以及它 ...

  4. python数据挖掘视频_python+opencv实时视频目标检测

    python+opencv实时视频目标检测 opencv环境 1.访问Python Extension Packages for Windows,下载python对应版本的opencv. 比如小编下载 ...

  5. python compare函数_Python Opencv中用compareHist函数进行直方图比较对比图片

    图像直方图 图像直方图是反映一个图像像素分布的统计表,其实横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的.纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比. 图像是由像素 ...

  6. python 字符匹配_python 中如何匹配字符串

    python 中如何匹配字符串? 1. re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none.import re line="th ...

  7. python高通滤波器设计_python实现直方图均衡化,理想高通滤波与高斯低通滤波

    写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验二,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验二. 由于时间紧张,代码没有进行任何优化, ...

  8. python正则匹配_Python正则表达式只匹配一次

    我正在尝试创建一个简单的降价乳胶转换器,只是为了学习 python和基本的正则表达式,但我不知道试图弄清楚为什么下面的代码不起作用: re.sub (r'\[\*\](.*?)\[\*\]: ?(.* ...

  9. python实现括号匹配_python实现括号匹配

    主要的思路: 首先设置两个列表分别存放的是各种括号的开括号和闭括号,然后遍历给定的字符串,分如下几种情况: 1.字符串首字符出现在闭括号列表中,直接结束,输出错误 2.字符串长度不为偶数,直接结束,输 ...

  10. python贪婪匹配_python re模块匹配贪婪和非贪婪模式详解

    python re模块匹配贪婪和非贪婪模式详解 这篇文章主要介绍了python re模块匹配贪婪和非贪婪模式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友 ...

最新文章

  1. 推荐系统超级公开课报名!
  2. Github上的10个数据科学和机器学习知识库
  3. flask+sqlite3+echarts3+ajax 异步数据加载
  4. html iframe.b.gen 病毒,常见病毒及处理方法.doc
  5. Flink从入门到精通100篇(二十二)- Flink应用实战案例:如何实现网络流控与反压机制
  6. div禁用,不可点击
  7. [Matlab]求解线性方程组
  8. 华为管理学案例分析_案例分析 华为——基于价值、围绕结果展开的绩效考核...
  9. 网站如何配置CDN加速?网站域名接入腾讯云CDN的步骤(附CDN防御)
  10. 百度首页被tn劫持的办法有那些、两种解决百度劫持的方法
  11. python 调用海康linux下psdatacall_demo,实现获取视频码流并返回到python,以及上传信息到人脸库的方法
  12. 全民一起VBA提高篇 专题1 第二回 变体终非万全策,数字要分长短型
  13. java 求方差_java计算方差、标准差(均方差)实例代码
  14. linux禁调usb,Linux主机禁用USB接口
  15. 《阳光下》 ——【传递正反馈】
  16. 从零开始,学会Python爬虫不再难!!! -- (13)selenium项目:自动点赞机丨蓄力计划
  17. “adb”不是内部或外部命令,也不是可运行的程序或批处理文件
  18. 挑战巨头,主打安全的Telegram、超信胜算几何?
  19. 来自中国的人工智能解决方案,如何风靡全球数亿用户?
  20. Python整数进制间转换

热门文章

  1. STM32G070用HAL库与AT24C08通讯
  2. java docx4j 目录_使用Docx4j创建word文档
  3. 前端H5面试题(总结)
  4. 天线效应的原理及消除【转帖】
  5. cnchar - 功能全面、支持多端的汉字拼音笔画开源 JS 库
  6. 方正文祥E520硬盘保护卡还原卡软件使用要点讲解
  7. 关于HP M125-M126的无线链接方案
  8. 计算机毕业设计ssm基于SSM框架的人力资源管理系统89kq5系统+程序+源码+lw+远程部署
  9. 《动手学深度学习》学习总结
  10. 微型计算机任务名称,任务五微型计算机的硬件组成.ppt