直方图均衡化取整怎么计算_玩转直方图处理之直方图均衡化、规定化
冒泡....双十一刚过~购物狂欢完还是要收心学习鸭!今天来说一说直方图。
直方图
定义:
直方图是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据类型,纵轴表示分布情况。
灰度直方图是灰度级的函数,描述的是图像中具有该灰度级的像元的个数。以横轴表示灰度级,以纵轴表示每一灰度级具有的像元数或该像元数占总像元数的比例值,做出的条形统计图即为灰度直方图。如以下:
直方图示例.png
由图像可以得到的一些直方图的性质:
a.图形直观可以发现它首先是一个一维离散函数图像。
b.直方图表示一幅图像中不同灰度像素出现的统计信息,它只能反映该图像中不同灰度值出现的频数(概率),而不能表示出像素的位置等其他信息。
c.任何一幅特定的图像都有唯一的直方图与之对应,但不同的图像可以有相同的直方图。
根据直方图的形态可以大致推断图像质量的好坏。由于图像包含有大量像元,其像元灰度值分布应符合概率统计分布规律。假定像元的灰度值是随机分布,那么其直方图应该是正态分布。
image.png
直方图的均衡化
直方图均衡化是将原图像的直方图通过变换函数变为均匀的直方图,然后按均匀直方图修改原图像,从而获得一幅灰度分布均匀的新图像。
image.png
image.png
接下来就推导一下均衡化的过程:
首先考虑连续的灰度值,用变量 r 表示输入图像的灰度,用 s 表示输出图像的灰度。r 范围是 [ 0, L-1],则函数: s = T(r), r 的范围:[0 , L-1] (0为全黑,L-1为全白)。
T(r)满足下列两个条件:
1.T(r)在区间0≤r≤1中为 严格单调递增函数,保证原图各灰度级在变换后仍保持从黑 到白(或从白到黑)的排列次序)
2.当0≤r≤1时,0≤T(r) ≤1,保证变换前后灰度值动态范围的一致性。
在处理的过程中需要引入重要的变换函数:
image.png其中:
根据学过的概率论可知:
image.png
所以可以得到如下过程:
image.png
最后可以发现:得到ps(s)是一个均匀的概率密度函数,与pr(r)无关
对于离散值,我们处理其概率(直方图值)与求和来替代处理概率密度函数与积分。因此,一幅数字图像中灰度级出现的概率(近似)和离散变换形式如下:
iMN为图像的总像素
接下来举例说明:
image.png
1.第一步利用变换公式求出s
image.png
2.把S的值化为近似的整数
s0 = 1.33≈1 ;s1 =3.08≈3 ;s2= 4.05≈4 ;
s3 = 5.67≈6 ;s4 =6.23≈6 ;s5 = 6.66≈7;
s6= 6.86≈7 ;s7 = 7.00≈7 ;
近似完之后,发现剩下1、3、4、6、7这五个不同的灰度级
(r0=0被映射为S0=1)
3.接下来就统计新的输出的灰度的相关参数
注意:sk=6的为s3和s4故nk是两个的叠加,p(sk)的值为nk/MN(4096)
作图直观:
image.png
Matlab代码参考
I = imread('rice.png');
[height,width] = size(I);
figure
subplot(221)
imshow(I)%显示原始图像
subplot(222)
imhist(I)%显示原始图像直方图
%进行像素灰度统计;
NumPixel = zeros(1,256);%统计各灰度数目,共256个灰度级
for i = 1:height
for j = 1: width
NumPixel(I(i,j) + 1) = NumPixel(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
end
end
%计算灰度分布密度
ProbPixel = zeros(1,256);
for i = 1:256
ProbPixel(i) = NumPixel(i) / (height * width * 1.0);
end
%计算累计直方图分布
CumuPixel = zeros(1,256);
for i = 1:256
if i == 1
CumuPixel(i) = ProbPixel(i);
else
CumuPixel(i) = CumuPixel(i - 1) + ProbPixel(i);
end
end
%累计分布取整
CumuPixel = uint8(255 .* CumuPixel + 0.5);
%对灰度值进行映射(均衡化)
for i = 1:height
for j = 1: width
I(i,j) = CumuPixel(I(i,j));
end
end
subplot(223)
imshow(I)%显示原始图像
subplot(224)
imhist(I)%显示原始图像直方图
直方图的规定化
从文字就可以看出,规定化就是把直方图转化为既定的规定化的形状。
过程如下:
先设 Pr(r)和Pz(z)分别表示原始灰度图像和目标图像的灰度分布概率密度函数.根据直方图规 定化的特点与要求,应使原始图像的直方图具有Pz(z)所表示的形状。因此建立Pr(r)和 Pz(z)之间的关系是直方图规定化必须解决的问题。
离散表达形式:
接下来举个例子说明:
image.png
第一步:要先根据图a提供的直方图求出输出之后均衡的值
公式参考:
求得完成后取近似值
s0 = 1.33≈1 ;s1 =3.08≈3 ;s2= 4.05≈4 ;
s3 = 5.67≈6 ;s4 =6.23≈6 ;s5 = 6.66≈7;
s6= 6.86≈7 ;s7 = 7.00≈7 ;
第二步:求变换函数G的所有值
参考公式如下:
image.png
过程如下:
image.png
再将求好的换成近似值
G(z0)≈0;G(z1)≈0;G(z2)≈0;
G(z3)≈1;G(z4)≈2;G(z5)≈5;
G(z6)≈6;G(z7)≈7;
第三步:寻找组射关系
根据刚刚两步的计算,可以发现G(z3)≈1,s0≈1,这种情况下就是一个完美的匹配了,也就是从s0→z3
因此可以列表
image.png
然后可以求出相应的概率,比如S=1映射到Z=3,790个像素为1,概率为790/4096=0.19.具体如下:
image.png
说明:和上一题联系
Pz(z=4)相当于Pr(r=1)
Pz(z=5)相当于Pr(r=2)--S=5映射到Z=5
Pz(z=6)相当于Pr(r=3)+Pr(r=4)
Pz(z=7)相当于Pr(r=5)+Pr(r=6)+Pr(r=7)
图形直观:
image.png
虽然没有完全匹配,但是也达到了将灰度明确移动到灰度级高端。
Ending 不容易地收尾啦~
直方图均衡化取整怎么计算_玩转直方图处理之直方图均衡化、规定化相关推荐
- 向上取整的方法_瓷砖测量的方法有哪些?瓷砖尺寸一般是多少?
随着瓷砖行业的不断进步和发展,越来越多款式各异的瓷砖出现在人们面前.各种各样规格尺寸的瓷砖构成了丰富多彩的瓷砖市场,接下来就和大家说一说在测量上面,和瓷砖相关的测量方法有哪些,为有需要的人们提供相关帮 ...
- 浮点数字取整的方法_浮点数字
Java™语言规范的版本5向java.lang.Math和java.lang.StrictMath添加了10个新方法,而Java 6添加了另外10 个方法 .本两篇系列文章的第1部分介绍了在数学上有意 ...
- 如何写python脚本抓取数据并计算_【小工具】利用Python脚本从Gaussian计算结果中提取信息...
1.前言 高斯(Gaussian)是一个功能强大的量子化学综合软件包,所有从事计算化学相关领域的科研工作者应该都使用或者了解过这个软件.它的输出文件(.log文件)是一个文本文件,可以利用文本工具打开 ...
- js两个数相除的结果四舍五入取整
给两个数5.3,下面来对这两个数相除进行取余数.取整数.以及保留两位小数等操作. console.log("整数")console.log(parseInt(5/3))consol ...
- python3小数向上取整_Python小数取整 向下取整、四舍五入、向上取整【分享】
本帖子想要达到的效果: 会配置实体服务规则(能用实体服务规则实现的,尽量选用实体服务规则实现), 设置实体服务规则的字段必然触发条件, 小数类型的 可以实现向下取整.四舍五入.向上取整 功能. 先看界 ...
- matlab数组平方的计算自定义函数_从零开始的matlab学习笔记——(38)简单数论计算函数:取整,gcd,lcm,质数,全排列...
matlab应用--求极限,求导,求积分,解方程,概率统计,函数绘图,三维图像,拟合函数,动态图,傅里叶变换,随机数,优化问题....更多内容尽在个人专栏:matlab学习 翻了翻优化工具箱,发现内容 ...
- python怎么取百位_#python计算结果百位500向下取整,(0-499取000,500-999取500)
!/usr/bin/env python coding:utf-8 计算结果百位500向下取整,(0-499取000,500-999取500) import math calc_Amount = fl ...
- matlab 增加图像对比度_计算机视觉学习笔记6 图像直方图与直方图均衡化
图像的直方图 图像直方图表示图像中每一种像素的个数,反映了图像中每种像素值出现的频率,是图像的基本统计特征之一,具有平移,旋转,缩放不变性,广泛应用于图像处理的各个领域.比如灰度图像的阈值分割,基于颜 ...
- 图解数组计算模块NumPy下(三角函数、四舍五入函数(around)、取整、将弧度转化为角度、统计分析函数、中位数、数组的排序、argsort()、lexsort())
本文来自<Python数据分析从入门到精通>--明日科技编著 8.5 NumPy常用统计分析函数 8.5.1 数学运算函数 NumPy包含大量的数学运算的函数,包括三角函数.算术运算函数. ...
最新文章
- 多目标跟踪:CVPR2019论文阅读
- CSS设计指南(读书笔记 - 选择器)
- 如何学习网络协议(学习笔记)
- QT的QJSValueIterator类的使用
- spark将rdd转为string_八、Spark之详解Tranformation算子
- 安装与优化 98
- 【cocos2d-x】对CCSprite进行高斯模糊
- java使用Redis3--完整模板类
- 190101每日一句
- 第四章 使用OpenCV探测来至运动的结构——Chapter 4:Exploring Structure from Motion Using OpenCV
- 大众点评美食评论爬虫
- svn clean up 失败
- c语言intmain作用,c语言intmain()是什么意思
- EMW3080+STC15轻松实现设备上云1(阿里云物联网平台、智能生活开放平台)
- html-css-边框样式
- OneNote 深度评测:使用资源、插件、模版
- UE4网络编程学习之路02----网络架构、通信
- 主板常见故障维修24例(新手必备)
- C++进阶 必读书籍
- 怒我直言你绝对不知道这些硬核的工具
热门文章
- 被告知孩子学校偷钱后
- 解决 Virtualbox 6.1.34 出现 End kernel panic - not syncing: attempted to kill the idle task
- Android手机接入usb屏幕失灵,手机屏幕失灵了怎么办?安卓手机屏幕失灵解决方法...
- 华为python673集_[译] 使用 Python 的 Pandas 和 Seaborn 框架从 Kaggle 数据集中提取信息...
- 入门级node+uni-app开发即时通讯聊天室(3)用户的搜索以及好友添加(二)
- Go: 模拟一张银行卡存、取、查的功能(综合练习)
- 产品logo的设计:图标与几何构成
- 1分钟理清楚C++类模板和模板类区别
- BK7256,上海博通Wi-Fi6SOC芯片,高度集成-支持100w像素,详细资料
- [企业信息化大家学系列]制造业税务成本