写在前面
因为笔者数字图像处理的作业是要求用VB来做规定化的处理,笔者写出来后想看看python有什么库可以实现,毕竟像均衡化之类的操作都可以通过py的cv2库里的函数解决,但是在CSDN上查询的时候发现大家都是用openCV或者matlab来做,python并没有相关的函数来进行规定化,唯一一个有规定化代码的但是是需要付钱的,于是笔者就用python写了一个可以做灰度图像直方匹配的代码。
(一)直方图匹配原理介绍
直方图规定化,也叫做直方图匹配,用于将图像变换为某一特定的灰度分布,也就是其目的的灰度直方图是已知的。这其实和均衡化很类似,均衡化后的灰度直方图也是已知的,是一个均匀分布的直方图;而规定化后的直方图可以随意的指定,也就是在执行规定化操作时,首先要知道变换后的灰度直方图,这样才能确定变换函数。规定化操作能够有目的的增强某个灰度区间,相比于,均衡化操作,规定化多了一个输入,但是其变换后的结果也更灵活。
(二)直方图匹配的实现
直方图规定化的实现可以分为一下四步:

  1. 计算原图像的累积直方图
  2. 计算规定直方图的累积直方图
  3. 计算两累积直方图的差值的绝对值
  4. 根据累积直方图差值建立灰度级的映射

(三)编码实现

import cv2import numpy as npimport matplotlib.pyplot as pltimg0=cv2.imread(r'C:\Users\58381\Desktop\lena.bmp')#读取原图片scr=cv2.imread(r'C:\Users\58381\Desktop\circle.bmp')#读取目标图片

完成读取之后转图片为灰度图片,笔者目前只会做灰度图片的规定化

#把两张图片转成真正的灰度图片,因为自己只会做灰度图片的规定化img0=cv2.cvtColor(img0,cv2.COLOR_BGR2GRAY)img=img0.copy()#用于之后做对比图scr=cv2.cvtColor(scr,cv2.COLOR_BGR2GRAY)

构造做映射的列表

mHist1=[]mNum1=[]inhist1=[]mHist2=[]mNum2=[]inhist2=[]

下面分别对两张图像进行均衡化

#对原图像进行均衡化
for i in range(256):mHist1.append(0)row,col=img.shape#获取原图像像素点的宽度和高度for i in range(row):for j in range(col):mHist1[img[i,j]]= mHist1[img[i,j]]+1#统计灰度值的个数mNum1.append(mHist1[0]/img.size)for i in range(0,255):mNum1.append(mNum1[i]+mHist1[i+1]/img.size)for i in range(256):inhist1.append(round(255*mNum1[i]))#对目标图像进行均衡化for i in range(256):mHist2.append(0)rows,cols=scr.shape#获取目标图像像素点的宽度和高度for i in range(rows):for j in range(cols):mHist2[scr[i,j]]= mHist2[scr[i,j]]+1#统计灰度值的个数mNum2.append(mHist2[0]/scr.size)for i in range(0,255):mNum2.append(mNum2[i]+mHist2[i+1]/scr.size)for i in range(256):inhist2.append(round(255*mNum2[i]))

两张图片都均衡化好之后,就通过数组间的映射进行规定化处理

#进行规定化g=[]#用于放入规定化后的图片像素for i in range(256):a=inhist1[i]flag=Truefor j in range(256):if inhist2[j]==a:g.append(j)flag=Falsebreakif flag==True:minp=255for j in range(256):b=abs(inhist2[j]-a)if b<minp:                minp=bjmin=jg.append(jmin)for i in range(row):for j in range(col):img[i,j]=g[img[i,j]]

在这里规定化就完成了,我们来看看效果。
先看看原图像以及其灰度直方图

cv2.imshow("原图",img0)
cv2.waitKey(0)
plt.hist(img0.ravel(),256)
plt.show()


然后是目标图片的原图以及直方图

cv2.imshow("目标图",scr)
cv2.waitKey(0)
plt.hist(scr.ravel(),256)
plt.show()


然后看看规定化之后的图片以及其直方图

cv2.imshow("规定化",img)
cv2.waitKey(0)
plt.hist(img.ravel(),256)
plt.show()


最后把两张图片一起展示。

写在最后
我会尽快在做完测量的作业之后把彩色图片的规定化编好,由于时间有限,笔者的代码不是特别精简,有很多地方可以优化,大家凑合着看看。

python图像处理:直方图的规定化(直方图匹配)相关推荐

  1. [Python图像处理] 七.图像阈值化处理及算法对比

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

  2. python图像处理之图像灰度化

    灰度化 预备知识 在了解图像处理的基本操作之前,我们需要知道关于图像的一些基本知识.我们这里所说的图像处理实质上是数字图像处理,因为计算机只能对数字信号进行处理,因此存储在计算机中的图像都是实际图像经 ...

  3. 【python图像处理】图像灰度化处理、图像灰度线性变换、图像灰度非线性变换

    一.图像灰度化处理 1.最大值灰度处理方法 2.平均灰度处理方法 3.加权平均灰度处理方法 二.图像灰度线性变换 1.图像灰度上移变换 2.图像对比度增强变换 3.图像对比度减弱变换 4.图像灰度反色 ...

  4. 万字长文告诉新手如何学习Python图像处理(上篇完结 四十四) | 「Python」有奖征文

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

  5. [Python图像处理] 三十三.图像各种特效处理及原理万字详解(毛玻璃、浮雕、素描、怀旧、流年、滤镜等)...

    此文转载自:https://blog.csdn.net/Eastmount/article/details/111568397#commentBox 该系列文章是讲解Python OpenCV图像处理 ...

  6. python低通滤波器_[Python图像处理] 二十三.傅里叶变换之高通滤波和低通滤波

    [Python图像处理] 二十三.傅里叶变换之高通滤波和低通滤波 发布时间:2019-04-28 20:35, 浏览次数:2739 , 标签: Python 该系列文章是讲解Python OpenCV ...

  7. python灰度图片格式_[Python图像处理] 十五.图像的灰度线性变换

    [Python图像处理] 十五.图像的灰度线性变换 发布时间:2019-03-28 00:08, 浏览次数:619 , 标签: Python 该系列文章是讲解Python OpenCV图像处理知识,前 ...

  8. 高手勿入!直方图均衡化、规定化(匹配)

    1.基于直方图的图像增强原理 1.1直方图是什么? 直方图分为一维直方图和二维直方图.文本仅介绍一维直方图,读者可举一反三学会二维直方图. 如上就是一张图片的一维直方图,一维直方图描述的是图片的灰度图 ...

  9. [Python图像处理] 三十八.OpenCV图像增强和图像去雾万字详解(直方图均衡化、局部直方图均衡化、自动色彩均衡化)

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

最新文章

  1. 安装 Window 10 for Linux 子系统教程(WSL)
  2. 用递归求最大值PHP,php如何使用递归来计算一个目录中所有文件的大小(代码)...
  3. mac 不能连接wi-fi_如何在Mac OS X中查看当前的Wi-Fi连接速度
  4. arp miss攻击_网络应用华为S9300核心交换机ARP安全配置
  5. Linux双系统容易崩溃吗,一个蛋疼的双系统问题(崩溃)
  6. SQL Server 2008 评估已过期解决方案
  7. [转] eclipse安装subversive插件
  8. oracle数据库中的回收站,Oracle回收站的清理方法
  9. matlab 文本分类,中文文本分类语料库-TanCorpV1.0
  10. linux mysql5.7免安装版配置_MySQL5.7免安装版配置
  11. 智能家居系列之Home Assistant
  12. windows cmd字典
  13. 高新技术企业的优惠政策有哪些
  14. Scratch案例——巧解数学题,求累加和
  15. 筛选后系列填充_刷新认知,Excel除了可以横向筛选,还能……
  16. HTML5游戏实战(2):90行代码实现捕鱼达人
  17. VS2013快速安装教程,简单明了!
  18. centos7 docker 安装企业版kong
  19. React Native 之createDrawerNavigator和createSwitchNavigator
  20. flash 第三,四,五章课后练习

热门文章

  1. 如何ssh连接本地的虚拟机
  2. 青藤 #10115 栈练习1
  3. 分享一个好用的CSS布局
  4. dex分包方案概述与multidex包的配置使用
  5. Excel保护怎么解除保护
  6. matlab导入excel数据并作图
  7. wps思维导图聚焦模式是灰色不能用的解决方案
  8. java按照空格分割,Java用split实现分割含一个或多个空格的字符串
  9. AttributeError: 'NoneType' object has no attribute 'sc' 解决方法!
  10. MicroSoft Visual Studio 2013 社区版下载地址