前言

直方图匹配可以使得影像A的灰度分布变换为影像B的灰度分布。

代码

#coding=utf-8
import os
import matplotlib
import numpy as np
from numba import jit
from osgeo import gdal
from PIL import Image
from matplotlib import pyplot as plt
import cv2 as cv@jit
def arrayToHist(grayArray,nums):if(len(grayArray.shape) != 2):print("length error")return Nonew,h = grayArray.shapehist = {}for k in range(nums):hist[k] = 0for i in range(w):for j in range(h):if(hist.get(grayArray[i][j]) is None):hist[grayArray[i][j]] = 0hist[grayArray[i][j]] += 1n = w*hfor key in hist.keys():hist[key] = float(hist[key])/nreturn hist
@jit
def histMatch(grayArray,h_d):tmp = 0.0h_acc = h_d.copy()for i in range(256):tmp += h_d[i]h_acc[i] = tmph1 = arrayToHist(grayArray,256)tmp = 0.0h1_acc = h1.copy()for i in range(256):tmp += h1[i]h1_acc[i] = tmpM = np.zeros(256)for i in range(256):idx = 0minv = 1for j in h_acc:if (np.fabs(h_acc[j] - h1_acc[i]) < minv):minv = np.fabs(h_acc[j] - h1_acc[i])idx = int(j)M[i] = idxdes = M[grayArray]return des@jit
def equalization(grayArray,h_s,nums):tmp = 0.0h_acc = h_s.copy()for i in range(256):tmp += h_s[i]h_acc[i] = tmpif(len(grayArray.shape) != 2):print("length error")return Nonew,h = grayArray.shapedes = np.zeros((w,h),dtype = np.uint8)for i in range(w):for j in range(h):des[i][j] = int((nums - 1)* h_acc[grayArray[i][j] ] +0.5)return des@jit
def drawHist(hist,name):keys = hist.keys()values = hist.values()x_size = len(hist)-1axis_params = []axis_params.append(0)axis_params.append(x_size)if name != None:plt.title(name)plt.bar(tuple(keys),tuple(values))def read_img(filename):dataset=gdal.Open(filename)im_width = dataset.RasterXSizeim_height = dataset.RasterYSizeim_geotrans = dataset.GetGeoTransform()im_proj = dataset.GetProjection()im_data = dataset.ReadAsArray(0,0,im_width,im_height)del dataset return im_proj,im_geotrans,im_datadef mkdir(path):if not os.path.exists(path):os.mkdir(path)if __name__ == '__main__':import matplotlib.pyplot as pltimdir_match = "./test/0000000005_image.tif"imdir = "./test5/aircraft_229.jpg"out_file = './test5_/'mkdir(out_file)data1 = cv.imread(imdir)data2 = cv.imread(imdir_match)# data1 = cv.resize(data1, dsize=(1000, 1000))com = np.zeros_like(data1)for i in range(3):f1 = data1[:,:, i]f2 = data2[:,:, i]hist_m = arrayToHist(f2, 256)im_f1 = histMatch(f1, hist_m)com[:, :, i] = im_f1out_full_path = os.path.join(out_file, '201612_match.tif')cv.imwrite(out_full_path, com)

图像处理之直方图匹配相关推荐

  1. 数字图像处理:直方图匹配或规定化Histogram Matching (Specification)原理及感悟

    ☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░ 注意:本文是<数字图像直方图匹配或规定化Histogram Matching ( ...

  2. python图像处理:直方图的规定化(直方图匹配)

    写在前面 因为笔者数字图像处理的作业是要求用VB来做规定化的处理,笔者写出来后想看看python有什么库可以实现,毕竟像均衡化之类的操作都可以通过py的cv2库里的函数解决,但是在CSDN上查询的时候 ...

  3. c++ opencv 图像处理:直方图处理(直方图均衡化,直方图匹配(规定化))

    文章目录 前言 一.直方图(histogram) 二.直方图处理 1.直方图均衡化 2.直方图匹配(规定化) 三.opencv函数总结 1.equalizeHist图像均衡化 2.calcHist获取 ...

  4. 遥感数字图像处理(实验一)——预处理、图像的真彩色和拉伸显示(包括图像的直方图显示、线性拉伸、与直方图匹配)

    目录 实验目的: 实验内容一: 实验步骤: 一.影像的获取 二.影像的合成 三.对合成的影像进行不规则分幅裁剪 四.对裁剪的影像进行拉伸 五.直方图匹配 六.实验总结及扩展 实验目的: 理解遥感数字图 ...

  5. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波9 - 直方图处理 - 直方图匹配(规定化)灰度图像,彩色图像都适用

    直方图匹配(规定化) 连续灰度 s=T(r)=(L−1)∫0rpr(w)dw(3.17)s = T(r) = (L-1) \int_{0}^{r} p_r(w) \text{d} w \tag{3.1 ...

  6. Matlab数字图像处理 02 灰度变化(图像直方图、直方图均衡化、直方图匹配)

    第二章 灰度变化 2.1 图像的亮度.对比度和动态范围 2.1.1 亮度 2.1.2 对比度 2.1.3 动态范围 2.2 线性灰度变换 2.2.1 具有饱和处理的线性灰度变换 2.2.2 分段线性灰 ...

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

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

  8. 【OpenCV 例程200篇】47. 图像增强—直方图匹配

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

  9. 【matlab图像处理】直方图均衡化操作

    中国史之[百家争鸣]: 春秋战国时期,知识分子中不同学派及各家族流派之间争芳斗艳的学术局面.这是中国思想.学术发展的黄金时期,史称"百家争鸣". --来源:全历史APP [路漫漫其 ...

  10. 直方图规定化(直方图匹配)

    在介绍直方图规定化之前,先介绍一下统计直方图和累积直方图.参考自:http://blog.csdn.net/tkp2014/article/details/40151515 对颜色特征的表达方式有许多 ...

最新文章

  1. 安装vim-go插件之后遇到的gopls警告信息不消失的问题的解决方法
  2. CF70D Professor's task(动态凸包)
  3. 反转链表:输入一个链表的头结点,反转该链表并输出反转后的链表的头结点。...
  4. hdu 5139(离线处理)
  5. uniapp点击图片放大_手机做图片放大镜效果很难?看这里,分分钟就能学会!
  6. Linux多进程拷贝文件
  7. 信号发送函数sigqueue和信号安装函数sigaction
  8. python 服务器_NeurDICOM——DICOMweb服务器端Python实现范例
  9. Rust 与服务端编程的碎碎念
  10. 用Java编写考试报名系统_基于jsp的计算机考试报名系统-JavaEE实现计算机考试报名系统 - java项目源码...
  11. Anaconda安装python包的几种方法
  12. 用Python编游戏
  13. 对象存储oss挂载工具ossfs的使用
  14. html怎么统计总访问量,如何实现对网站页面访问量的统计?
  15. 测试用例编写方法——场景法
  16. 基于MATLAB与Python计算长时间遥感栅格图像的像元值变异系数(CV)
  17. 螃蟹辞职 大数据冲击网络社交 魔兽世界如何前进
  18. docker可视化工具Shipyard
  19. 企业微信微信社群运营该怎么做?
  20. 关于PEP8报too long问题的解决方式

热门文章

  1. linux steam安装目录,如何在Ubuntu Linux上下载和安装Steam
  2. 提示参数错误html页面,网页上有错误怎么修复提示参数错误
  3. Android UI:使用矢量图,抛弃PNG
  4. Java 类加载器 详解
  5. 无线路由器和无线网卡的普及知识贴及选择(2019.05更新802.11AX网卡,3T3R wave2路由器推荐)
  6. OneNote 提示不能使用个人账户登录( 亲测可用)
  7. 如何用数据驱动的广告效果
  8. 已将该虚拟机配置为使用 64 位客户机操作系统。但是,无法执行 64 位操作。.....LeoMoon CPU-V.exe虚拟机检测工具
  9. ssdp协议 upnp_【零知ESP8266】教程:SSDP简单服务发现协议示例
  10. 参数化三维管网建模系统MagicPipe3D