数字图像处理-直方图均衡化与直方图规定化

  • 前言
  • 题目描述
  • 基本概念
  • 学习目标
  • 代码实现
  • 效果演示
  • 总结

前言

本数字图像处理的学习系列是对课本知识的实现,完成课程相关的实验部分。


题目描述

熟练掌握直方图均衡化和直方图规定化的计算过程。

基本概念

  1. 直方图是多种空间域处理技术的基础。直方图操作可用于图像增强。
    归一化直方图:简单来说就是求估计概率,即每像素的个数除以总像素数。总概率为1.

  2. 掩膜:是用选定的图像、图形或物体,对要处理的图片进行遮挡,来控制图片处理的区域。通常使用二维矩阵进行掩膜,掩膜有0,1组成的二进制图像。
    掩膜的用途:提取感兴趣区域、屏蔽作用、结构特征提取、特殊形状图像制作

  3. 直方图均衡化:将一副倾向于占据一小部分可能的灰度级并且像素分布不均匀的图像变成一副占据整个可能的灰度级并且分布均匀的图像。这样做的目的是让该图像具有高对比度的外观并展示灰色调的较大变化。广泛用于X光中。
    直方图均衡化原理:灰度级变换函数,变换函数不改变前后灰度级的范围并且产生均匀直方图的图像。变换函数用于直方图均衡化而反变换用于直方图匹配。
    自适应的直方图均衡化:效果更佳,将整幅图像分为很多小块,然后对每一个小块分别进行直方图均衡化,最后使用双线性差值形式(为了去除边界)进行拼接。
    思考并区分:暗图像、亮图像、低对比度图像、高对比度图像?灰度直方图 or 彩色直方图?
    问题思考:关键点是均匀,如何确定变换函数?如何有效证明变换后的各灰度级的概率均匀?

  4. 直方图规定化:用于产生处理后有特殊直方图形状的方法。
    直方图规定化原理:灰度级的反变换

学习目标

1.掌握图像的直方图计算和显示
2.了解掩膜的应用
3.熟悉直方图均衡化,了解自适应的直方图均衡化
4.熟悉直方图规定化

代码实现

"""# -*- coding :utf-8 -*-# @Time:2022/3/129:05# @Author:WEIKETAN# @File:equalizeHIst.py# @Desc:灰度直方图、直方图均衡化、掩膜的应用,直方图规定化(TODO)
"""
import matplotlib
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt""" 1.draw and show grayscale_image"""
def dsGrayscaleimage():# 1.read grayscale_image directly"""imread(imgpath, 0):paramimgpathgray or RGB: default RGB、 gray -- 0:return:the image arrays"""img = cv.imread("F:\\Develop_Tools_Python\\Python_WorkSpace\\Notebook_Python_WorkSpace\\IMage_processing\\homeworks\\photo\\cat.jpeg", 0)plt.imshow(img, cmap=plt.cm.gray)  # default--热图(heatmap)、 another show_style: cv.imshow("grayImg",img)# 2.calculate grayscale_image"""cv2.calcHist(images,channels,mask,histSize,ranges[,hist[,accumulate]]):paramimages:raw images eg:[img]channels:number [0]--grayImage [0][1][2]--BGR(26 letter order)mask:local or globel  default:globel(None)histSize:the number of BIN(直条或组距) eg:[256]ranges:the range of pixel eg:[0,255]:return:the histr arrays"""histr = cv.calcHist([img], [0], None, [256], [0, 255])# print(histr, histr.shape)# 3.draw grayImage"""pyplot.figsize():param figsize : (float, float), default: :rc:`figure.figsize`Width, height in inches.dpi : float, default: :rc:`figure.dpi`The resolution of the figure in dots-per-inch."""plt.figure(figsize=(10, 6), dpi=100)plt.plot(histr)plt.show()""" 2.mask_ROI(Region of interest):使用掩膜提取感兴趣区域"""
def mask_ROI():# 1. 直接以灰度图的方式读入img = cv.imread("F:\\Develop_Tools_Python\\Python_WorkSpace\\Notebook_Python_WorkSpace\\IMage_processing\\homeworks\\photo\\cat.jpeg", 0)# plt.imshow(img, cmap=plt.cm.gray)# 2. 创建膜板mask = np.zeros(img.shape[:2], np.uint8)  # 提取图片的长和宽mask[400:650, 200:500] = 1# plt.imshow(mask, cmap=plt.cm.gray)# 3. 掩膜后数据masked_img = cv.bitwise_and(img, img, mask=mask)# plt.imshow(masked_img, cmap=plt.cm.gray)# 4. 统计掩膜后图像的灰度图mask_histr = cv.calcHist([img], [0], mask, [256], [0, 255])# 5. 图像展示# 设置字体为楷体,解决显示字体乱码问题matplotlib.rcParams['font.sans-serif'] = ['KaiTi']fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10, 8))axes[0, 0].imshow(img, cmap=plt.cm.gray)axes[0, 0].set_title("原图")axes[0, 1].imshow(mask, cmap=plt.cm.gray)axes[0, 1].set_title("膜板数据")axes[1, 0].imshow(masked_img, cmap=plt.cm.gray)axes[1, 0].set_title("掩膜后数据")axes[1, 1].plot(mask_histr)axes[1, 1].grid()axes[1, 1].set_title('灰度直方图')plt.show()""" 3.直方图均衡化"""
def equalizeHist():# 1. 读入图片img = cv.imread("F:\\Develop_Tools_Python\\Python_WorkSpace\\Notebook_Python_WorkSpace\\IMage_processing\\homeworks\\photo\\cat.jpeg", 0)# 2. 原图直方图histr = cv.calcHist([img], [0], None, [256], [0, 255])# 3. 均衡化处理dst = cv.equalizeHist(img)# 4. 均衡化后直方图histr1 = cv.calcHist([dst], [0], None, [256], [0, 255])# 4.  结果显示# 设置字体为楷体,解决显示字体乱码问题matplotlib.rcParams['font.sans-serif'] = ['KaiTi']fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10, 8))axes[0, 0].imshow(img, cmap=plt.cm.gray)axes[0, 0].set_title("原图")axes[0, 1].imshow(dst, cmap=plt.cm.gray)axes[0, 1].set_title("均衡化过的图片")axes[1, 0].plot(histr)axes[1, 0].set_title("原图直方图")axes[1, 1].plot(histr1)axes[1, 1].grid()axes[1, 1].set_title('均衡化直方图')plt.show()""" 4.自适应的直方图均衡化"""
def selfAdaptionQqualizeHist():# 1. 读取图片img = cv.imread("F:\\Develop_Tools_Python\\Python_WorkSpace\\Notebook_Python_WorkSpace\\IMage_processing\\homeworks\\photo\\cat.jpeg", 0)# 2. 原图直方图histr = cv.calcHist([img], [0], None, [256], [0, 255])# 3. 创建一个自适应均衡化的对象,并应用于图像# clipLimit:对比度限制,默认为 40# tileGridSize:分块大小,默认为 8 * 8clahe = cv.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))cl1 = clahe.apply(img)# 4. 原图直方图histr1 = cv.calcHist([cl1], [0], None, [256], [0, 255])# 5. 图像显示# 设置字体为楷体,解决显示字体乱码问题matplotlib.rcParams['font.sans-serif'] = ['KaiTi']fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10, 8))axes[0, 0].imshow(img, cmap=plt.cm.gray)axes[0, 0].set_title("原图")axes[0, 1].imshow(cl1, cmap=plt.cm.gray)axes[0, 1].set_title("均衡化过的图片")axes[1, 0].plot(histr)axes[1, 0].set_title("原图直方图")axes[1, 1].plot(histr1)axes[1, 1].set_title('均衡化直方图')plt.show()if __name__ == '__main__':# 1.灰度直方图计算和显示# dsGrayscaleimage()# 2.使用掩膜提取感兴趣区域# mask_ROI()# 3.直方图均衡化# equalizeHist()# 4. 自适应直方图均衡化selfAdaptionQqualizeHist()# 5.直方图规定化# todo

效果演示

1、灰度直方图计算和显示,调用dsGrayscaleimage函数后的结果
API: dsGrayscaleimage()

2.使用掩膜提取感兴趣区域
API: mask_ROI()

3.直方图均衡化(猫腿太暗,效果一般)
API: equalizeHist()

自适应的直方图均衡化
API: selfAdaptionQqualizeHist()

4.直方图规定化(没有函数库),暂时不做实现。

总结

1.图片展示的两种方式:cv.imshow()、plt.imshow()(默认为热图)
2.坑一解决:cv.calcHist([img], [0], None, [256], [0, 255])方法中的参数都需要使用中括号使其变成数据类型:[array([[data]], dtype=uint8)],例如使用[img]而不是img,否则结果有大问题。
3.坑二解决: # 设置字体为楷体,解决显示字体乱码问题
matplotlib.rcParams[‘font.sans-serif’] = [‘KaiTi’]
4.使用matplotlib进行画图(一张或者多张)


数字图像处理实验一 直方图均衡化与直方图规定化相关推荐

  1. 数字图像处理实验之对比度拉伸、直方图均衡化和规定化

    [实验内容]:  一.运用Matlab对Lena进行对比度拉伸增强(利用 imadjust  )  二.运用Matlab对图像进行直方图均衡化和规定化 Matlab版本:R2015a 一.运用Matl ...

  2. 数字图像处理实验01——直方图

    数字图像处理实验01 直方图 仅供学习 1.对实验图像RGB.jpg 进行彩色图像到灰度图像的转化,绘制其直方图,并选取合适的阈值将灰度图像转化为二值图像. 步骤 1)用下列函数将它们转换成不同灰度级 ...

  3. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波8 - 直方图处理 - 直方图均衡化(全局直方图均衡化)

    直方图均衡化 灰度映射函数: s=T(r),0≤r≤L−1(3.8)s = T(r), \quad 0\leq r \leq L -1 \tag{3.8}s=T(r),0≤r≤L−1(3.8) 假设: ...

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

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

  5. java 灰度直方图_【数字图像处理】灰度直方图、直方图均衡化、直方图规定化...

    灰度直方图 一幅图像由不同灰度值的像素组成,图像中灰度的分布情况是该图像的一个重要特征.图像的灰度直方图就描述了图像中灰度分布情况,能够很直观的展示出图像中各个灰度级所占的多少. 图像的灰度直方图是灰 ...

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

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

  7. 数字图像处理:第三章 灰度直方图

    第三章 灰度直方图 目录 1.    灰度直方图 2.    直方图均衡化 3.    直方图规范化 4.    色彩直方图 作业 1.灰度直方图 灰度直方图(histogram)是灰度级的函数,它表 ...

  8. 数字图像处理实验三图像增强

    一.实验目的 (1)了解图像增强的目的及意义,加深对图像增强的 感性认识,巩固所学的图像增强的理论知识和相 关算法. (2)熟练掌握直方图均衡化和直方图规定化的计算过 程. (3)熟练掌握空域滤波中常 ...

  9. matlab数字图像实验报告,数字图像处理实验报告(matlab)

    数字图像处理实验报告(matlab) 学院:自动化学院 班级:电081班 姓名:李林树 学号:40850099 2011年10月 实验一 直方图均衡化 一. 实验目的: 1. 熟悉图像数据在计算机中的 ...

  10. 图像处理边缘增强matlab,数字图像处理实验 matlab 图像增强 边缘检测 图像操作.doc...

    数字图像处理实验 matlab 图像增强 边缘检测 图像操作 实验1 点运算和直方图处理 实验目的 1. 掌握利用Matlab图像工具箱显示直方图的方法 2. 掌握运用点操作进行图像处理的基本原理. ...

最新文章

  1. Gut:北京生科院赵方庆团队揭示人体口腔菌群的稳定性和动态变化规律
  2. JDBC访问数据库的基本程序
  3. python中shift_Pandas DataFrame.shift()用法示例
  4. Nginx内置模块简介
  5. 麒麟9000芯片的库存真就是个迷
  6. JAVA中的“+”、“concat”和“append”
  7. robotframework接口测试初探1
  8. 如何在本机安装mysql_机器人之如何在本机安装MySQL,并配置电脑为数据库服务器...
  9. Arcmap计算土方量教程
  10. word输入带圈字符快捷键(0-20)
  11. 【Blender】UV贴图相关学习
  12. 去掉word中页眉上方的一条线
  13. vue 网络异常提示
  14. 对偶量子计算机,广义量子干涉原理及对偶量子计算机
  15. lda主题模型python实现篇_主题模型TopicModel:通过gensim实现LDA
  16. 时事点评—红芯浏览器事件
  17. 记frp内网穿透配置
  18. python中string什么意思_python字符串(string)方法整理
  19. 教你 2 招,保护 IoT 设备远离无孔不入的黑客
  20. PyQt5基本控件之菜单栏QMenuBar

热门文章

  1. IDEA从零到精通(34)之IDEA 强大的文件对比功能
  2. 使用Cgroup在Docker中进行资源管理
  3. 学前端需要什么基础知识(前端需要掌握什么 )
  4. php 活动报名,活动报名小程序 - 微信小程版的活动在线报名,支持付费活动发布! – 基于ThinkPHP和Bootstrap的极速后台开发框架...
  5. Java基础问题整理
  6. 在火狐浏览器里怎么看请求头
  7. python自定义二元一次函数_Python二元赋值实用技巧解析
  8. Oracle密码过期解决办法
  9. layer时间插件laydate
  10. 《复杂网络》的课程笔记,复杂网络,小世界网络,随机网络,无标度网络,入门