中国史之【百家争鸣】:
春秋战国时期,知识分子中不同学派及各家族流派之间争芳斗艳的学术局面。这是中国思想、学术发展的黄金时期,史称“百家争鸣”。
——来源:全历史APP

【路漫漫其修远兮,吾将上下而求索】

今天介绍图像的直方图均衡化操作。本内容参考自《实用MATLAB图像和视频处理》第9章。

  • 对于matlab2021的安装,可以参考公众号【CV之道】的文章:【matlab安装】手把手图文并茂安装matlab2021(win10版)

1、图像直方图均衡化

在matlab中,显示一幅图像的直方图,可以使用函数imhist。而对一幅图像进行直方图均衡化,可以使用函数histeq。废话少说,我们先对一张低对比度的图像进行均衡化,直接看代码:

% 显示直方图
I = imread('pout.tif');
figure, subplot(2,2,1), imshow(I), title('原图')
subplot(2,2,2), imhist(I), title('原图的直方图') % 使用histeq进行直方图均衡化
I_eq = histeq(I, 256);
subplot(2,2,3), imshow(I_eq), title('均衡化的图')
subplot(2,2,4), imhist(I_eq), title('均衡化后的直方图')

从上面的视觉效果来看,对一张低对比度的图片进行直方图均衡化,可以明显改善图像的对比度。

我们再看一个例子。

% 另一个例子
% 显示直方图
I = imread('tire.tif');
figure, subplot(2,2,1), imshow(I), title('原图')
subplot(2,2,2), imhist(I), title('原图的直方图') % 使用histeq进行直方图均衡化
I_eq = histeq(I, 256);
subplot(2,2,3), imshow(I_eq), title('均衡化的图')
subplot(2,2,4), imhist(I_eq), title('均衡化后的直方图')

对于这个图片,直方图的效果反而变差了。为什么呢?我们观察一下他们的直方图。分析原图的直方图,像素主要聚集在低灰度级,因为黑色橡胶占大面积,所以整体偏暗,而少部分像素偏亮,对应中间的白色金属。这样是合理的。

然而,一旦均衡化后,这种对比度被重置了,把像素右移后,导致整体图像都是偏亮,反而对比度不明显。所以,直方图均衡化并不总是取得好的效果,它是取决于原始图像的。

我们再看一个例子,探索一下均衡化为什么不起作用。

% 探索直方图均衡化的局限
% 显示直方图
I = imread('eight.tif');
figure, subplot(3,2,1), imshow(I), title('原图')
subplot(3,2,2), imhist(I), title('原图的直方图') % 使用histeq进行直方图均衡化
I_eq = histeq(I, 256);
subplot(3,2,3), imshow(I_eq), title('均衡化的图')
subplot(3,2,4), imhist(I_eq), title('均衡化后的直方图') I_hist = imhist(I);
tf = cumsum(I_hist);
tf_norm = tf / max(tf);
subplot(3,2,5), plot(tf_norm), axis tight, title('原图归一化的函数')[newmap, T] = histeq(I);
subplot(3,2,6), plot(T), axis tight, title('原图均衡化的函数')

上面的例子均衡化后效果也不好,我们观察两条曲线,左边是计算直方图归一化的函数,右边是内置均衡化的函数,可以看到他们非常像,所以可以知道,用于均衡化的函数仅是原始函数的cdf函数,也就是累积分布函数。均衡化的过程仅试图平坦化直方图。

2、图像直方图规定化(匹配)

对于这种情况,可以使用直方图规定化(也叫直方图匹配)技术解决,它可以不使用默认的cdf函数,而是自己指定函数。

% (4)直方图规定化(匹配)
img1 = imread('eight.tif');
figure, subplot(3,3,1), imshow(img1), title('原图')
subplot(3,3,2), imhist(img1), title('原图的直方图') img1_eq = histeq(img1);
subplot(3,3,4), imshow(img1_eq), title('均衡化原图')
subplot(3,3,5), imhist(img1_eq), title('均衡化后的直方图')
m1 = ones(1, 256) * 0.5;
subplot(3,3,6), plot(m1), title('直方图曲线'), ylim([0 1]), xlim([1 256])m2 = linspace(0,1,256);
img2 = histeq(img1, m2);
subplot(3,3,7), imshow(img2), title('规定化后的图')
subplot(3,3,8), imhist(img2), title('规定化后的直方图')
subplot(3,3,9), plot(m2), title('期望直方图形状'), ylim([0 1]), xlim([1 256])

从上面可以看到,执行直方图规定化需要生成一个代表期望直方图形状的函数。对于这张图片,规定化的效果比均衡化的效果要好。

以上是本期内容,建议自己动手来实践一下。如果需要图片和代码,可以关注公众号,回复关键字【matlab代码】即可获得。我会上传到云盘。

【声明】:学习笔记基于互联网上各种学习资源的个人整理。

以上是本期内容,下期介绍图像处理的邻域处理。

我叫小保,一名计算机视觉爱好者、学习者、追随者,欢迎关注我【CV之道】一起学习。

【matlab图像处理】直方图均衡化操作相关推荐

  1. matlab实现直方图均衡化

    直方图均衡化是一种利用灰度变换自动调节图像对比度质量的方法,基本思想是通过灰度级的概率密度函数求出灰度变换函数,它是一种以累计分布函数变换法为基础的直方图修正法. 直方图均衡化处理的步骤如下: 1. ...

  2. python用numpy和pil处理图像成灰度图_「火炉炼AI」机器学习047-图像的直方图均衡化操作...

    [火炉炼AI]机器学习047-图像的直方图均衡化操作 [火炉炼AI]机器学习047-图像的直方图均衡化操作 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, sc ...

  3. python直方图均衡化代码_基于matlab的直方图均衡化代码

    基于matlab的直方图均衡化代码 2007-04-15 20:15 clear all %一,图像的预处理,读入彩***像将其灰度化 PS=imread('1.jpg');             ...

  4. 直方图均衡化 matlab代码,基于matlab的直方图均衡化代码

    基于matlab的直方图均衡化代码 2007-04-15 20:15 clear all %一,图像的预处理,读入彩***像将其灰度化 PS=imread('1.jpg');             ...

  5. 数字图像处理 直方图均衡化 MATLAB实验

    一.原理 直方图均衡化是通过对原图像进行某种变换使原图像的灰度直方图修正为均匀的直方图的一种方法. 二.步骤 ①读入原图像huafen.jpg,并显示图像及其直方图: ②对图像进行直方图均衡化处理,并 ...

  6. Matlab实现直方图均衡化(基于自定义函数)

    Matlalb实现直方图均衡化 直方图均衡化 Matlab代码实现 直方图均衡化 直方图均衡化是一种使输出图像直方图近似服从均匀分布的变换算法,其计算步骤如下: 列出原始图像的灰度级fjf_jfj​, ...

  7. 图像处理-直方图均衡化

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-11.html 概念 在统计学中,直方图(英语:Histogra ...

  8. [图像处理] 直方图均衡化原理 - 数学推导

    直方图均衡化 效果 代码 import cv2 as cv import numpy as np import matplotlib.pyplot as pltsrc = cv.imread(&quo ...

  9. 详细解析图像处理 直方图均衡化计算

    什么是直方图均衡化 看一个图了解一下什么是直方图均衡化: 第一个图灰度都集中在左边,整体图像较暗 第二个图灰度都集中在右边,整体图像较亮 第三个图灰度都集中在中间,整体图像适中,但是雾蒙蒙的并不清晰 ...

最新文章

  1. python 实现结构树模式显示目录下文件
  2. 西游东去 (~~创意?创新?恶搞?不置可否,不过有点意思)
  3. 八十七、CSS水平垂直居中的布局方式
  4. Struts2【一】 配置介绍
  5. Machine Learning(CF-940F)
  6. Ubuntu配置教程
  7. 从零实现深度学习框架——实现自己的Tensor对象
  8. gcc详解以及静态,动态库的生成 1
  9. 年终总结:我的2016
  10. 罗技m330更换接收器(通过重新对码的方式)
  11. word2007表格计算机,电脑员好做吗?使用word2007表格?
  12. 微软上海招 Principal Manager!
  13. rangeOfString 与containsString
  14. 国微大学php,国微CMS学校网站系统(学校版) v20191205
  15. 计算机算法设计与分析第五章思维导图知识点总结 ( 初稿 )
  16. 程序员不同方向入门路线全解
  17. HLOJ 2018 某校几人
  18. (问答)50m带宽的实际速率是多少
  19. springboot在线原型工程生成工具
  20. 从根上彻底理解各种变换之一:变换基本概念

热门文章

  1. Nodejs内存溢出原因
  2. RabbitMQ应用案例
  3. 流媒体技术笔记(视频编码相关)
  4. linux命令忽略大小写zip,Linux基础命令---unzip
  5. 打通现实世界,工程师通过DeFi一天内完成抵押借贷偿还房屋贷款
  6. “org.springframework.beans.factory.BeanCreationException: Error creating bean with name xxx“问题解决
  7. LeetCode算法日记:340.至多包含K个不同字符的最长子串
  8. 微信公众号开发-(.net)
  9. java word 加密_java 加密解密WORD文档
  10. CAXA 电子图板 二次开发 功能定制