图像处理之直方图匹配
前言
直方图匹配可以使得影像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)
图像处理之直方图匹配相关推荐
- 数字图像处理:直方图匹配或规定化Histogram Matching (Specification)原理及感悟
☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░ 注意:本文是<数字图像直方图匹配或规定化Histogram Matching ( ...
- python图像处理:直方图的规定化(直方图匹配)
写在前面 因为笔者数字图像处理的作业是要求用VB来做规定化的处理,笔者写出来后想看看python有什么库可以实现,毕竟像均衡化之类的操作都可以通过py的cv2库里的函数解决,但是在CSDN上查询的时候 ...
- c++ opencv 图像处理:直方图处理(直方图均衡化,直方图匹配(规定化))
文章目录 前言 一.直方图(histogram) 二.直方图处理 1.直方图均衡化 2.直方图匹配(规定化) 三.opencv函数总结 1.equalizeHist图像均衡化 2.calcHist获取 ...
- 遥感数字图像处理(实验一)——预处理、图像的真彩色和拉伸显示(包括图像的直方图显示、线性拉伸、与直方图匹配)
目录 实验目的: 实验内容一: 实验步骤: 一.影像的获取 二.影像的合成 三.对合成的影像进行不规则分幅裁剪 四.对裁剪的影像进行拉伸 五.直方图匹配 六.实验总结及扩展 实验目的: 理解遥感数字图 ...
- 第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 ...
- Matlab数字图像处理 02 灰度变化(图像直方图、直方图均衡化、直方图匹配)
第二章 灰度变化 2.1 图像的亮度.对比度和动态范围 2.1.1 亮度 2.1.2 对比度 2.1.3 动态范围 2.2 线性灰度变换 2.2.1 具有饱和处理的线性灰度变换 2.2.2 分段线性灰 ...
- 【OpenCV 例程200篇】48. 图像增强—彩色直方图匹配
[OpenCV 例程200篇]48. 图像增强-彩色直方图匹配 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 图像直 ...
- 【OpenCV 例程200篇】47. 图像增强—直方图匹配
[OpenCV 例程200篇]47. 图像增强-直方图匹配 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 图像直方图 ...
- 【matlab图像处理】直方图均衡化操作
中国史之[百家争鸣]: 春秋战国时期,知识分子中不同学派及各家族流派之间争芳斗艳的学术局面.这是中国思想.学术发展的黄金时期,史称"百家争鸣". --来源:全历史APP [路漫漫其 ...
- 直方图规定化(直方图匹配)
在介绍直方图规定化之前,先介绍一下统计直方图和累积直方图.参考自:http://blog.csdn.net/tkp2014/article/details/40151515 对颜色特征的表达方式有许多 ...
最新文章
- 安装vim-go插件之后遇到的gopls警告信息不消失的问题的解决方法
- CF70D Professor's task(动态凸包)
- 反转链表:输入一个链表的头结点,反转该链表并输出反转后的链表的头结点。...
- hdu 5139(离线处理)
- uniapp点击图片放大_手机做图片放大镜效果很难?看这里,分分钟就能学会!
- Linux多进程拷贝文件
- 信号发送函数sigqueue和信号安装函数sigaction
- python 服务器_NeurDICOM——DICOMweb服务器端Python实现范例
- Rust 与服务端编程的碎碎念
- 用Java编写考试报名系统_基于jsp的计算机考试报名系统-JavaEE实现计算机考试报名系统 - java项目源码...
- Anaconda安装python包的几种方法
- 用Python编游戏
- 对象存储oss挂载工具ossfs的使用
- html怎么统计总访问量,如何实现对网站页面访问量的统计?
- 测试用例编写方法——场景法
- 基于MATLAB与Python计算长时间遥感栅格图像的像元值变异系数(CV)
- 螃蟹辞职 大数据冲击网络社交 魔兽世界如何前进
- docker可视化工具Shipyard
- 企业微信微信社群运营该怎么做?
- 关于PEP8报too long问题的解决方式
热门文章
- linux steam安装目录,如何在Ubuntu Linux上下载和安装Steam
- 提示参数错误html页面,网页上有错误怎么修复提示参数错误
- Android UI:使用矢量图,抛弃PNG
- Java 类加载器 详解
- 无线路由器和无线网卡的普及知识贴及选择(2019.05更新802.11AX网卡,3T3R wave2路由器推荐)
- OneNote 提示不能使用个人账户登录(	亲测可用)
- 如何用数据驱动的广告效果
- 已将该虚拟机配置为使用 64 位客户机操作系统。但是,无法执行 64 位操作。.....LeoMoon CPU-V.exe虚拟机检测工具
- ssdp协议 upnp_【零知ESP8266】教程:SSDP简单服务发现协议示例
- 参数化三维管网建模系统MagicPipe3D