技术标签: 直方图均衡 16位直方图均衡 8位直方图均衡 # OpenCV图像处理
理论知识来源:
直方图均衡化算法原理与实现
直方图均衡化
16位或者8位直方图实现代码:
直方图均衡(支持单通道16位和8位图像).rar
直方图均衡化是一种简单有效的图像增强技术,通过改变图像的直方图来改变图像中各像素的灰度,主要用于增强动态范围偏小的图像的对比度。原始图像由于其灰度分布可能集中在较窄的区间,造成图像不够清晰。
例如,过曝光图像的灰度级集中在高亮度范围内,而曝光不足将使图像灰度级集中在低亮度范围内。
采用直方图均衡化,可以把原始图像的直方图变换为均匀分布(均衡)的形式,这样就增加了像素之间灰度值差别的动态范围,从而达到增强图像整体对比度的效果。
换言之,直方图均衡化的基本原理是:对在图像中像素个数多的灰度值(即对画面起主要作用的灰度值)进行展宽,而对像素个数少的灰度值(即对画面不起主要作用的灰度值)进行归并,从而增大对比度,使图像清晰,达到增强的目的。
我们知道提高图像对比度的变换函数f(x)f(x)f(x)需要满足一下条件:
我们知道当图像直方图完全均匀分布的时候,此时图像的熵是最大的(随机变量每个值的概率都相同时,概率最大),图像对比度是最大的。所以,理想情况下,图像经过变换函数f(x)变换后,直方图能够均匀分布,此时对比度是最大的。
那问题来了?怎样的变换函数具有如此神奇的功能呢?
在图像处理中,有一个重要的函数,能够满足上面的条件:
其中 p x ( x ) p_x(x) px(x)表示概率密度函数,在离散的图像中,表示直方图的每个灰度级的概率(在图像中,灰度级就可以看成是一个随机变量,而直方图就是该随机变量的概率密度函数),由概率论的知识,我们可以知道,变换函数f(x)其实就是连续型随机变量x的分布函数,表示的是函数下方的面积。
分布函数的两个性质:1.单调不减 2.值域为[0,1],我们可以知道f(x)满足条件1和2
有人可能会有这个疑问?图像是离散的,为什么可以用连续的来表示呢?从数学角度来看,离散是连续的一种特例(图像就是一个很好的例子)
下面我们证明变换后的直方图是均匀的。
由概率论知识,变换后的概率密度:
由变上限函数求导法则可知:
反函数的导数等于原函数导数的倒数,所以
所以:
看到了吧,变换后的概率密度函数是一个均匀分布,对于图像来说,就是每个灰度级概率都是相等的,达到了我们的目的。
下面我们需要将这个变换函数转换为图像中的表达,图像中,我们可以知道,可以使用求和代替积分,差分代替微分,所以上述的变换函数就是:
其中h(x)表示直方图中每个灰度级像素的个数, w和 h分别表示图像的宽和高。
了解直方图均衡化的原理之后,我们以一个简单的例子来手工计算均衡化后的图像。这里我们假设存在以下这张图像(假定图像的灰度级范围是 [0, 9]):
第一步,计算原始图像的灰度直方图 n k n_{k} nk。
n ( 0 ) = 3 n(0) = 3 n(0)=3,即原始图像中灰度级为0的像素的个数是3,直接从图1中可以数出来。按这样的方式分别得出 n ( 1 ) , n ( 2 ) , . . . , n ( 9 ) n(1), n(2), ..., n(9) n(1),n(2),...,n(9)。这里我们可以得到 n k = [ 3 , 2 , 4 , 4 , 1 , 1 , 4 , 1 , 2 , 3 ] n_{k}= [3,2,4,4,1,1,4,1,2,3] nk=[3,2,4,4,1,1,4,1,2,3]。
第二步,计算原始图像的像素总个数。
N = 5 ∗ 5 = 25 N = 5*5 = 25 N=5∗5=25
第三步,计算原始图像的灰度分布频率。
p r ( k ) = n k / N = [ 3 / 25 , 2 / 25 , 4 / 25 , 4 / 25 , 1 / 25 , 1 / 25 , 4 / 25 , 1 / 25 , 2 / 25 , 3 / 25 ] , k = 0 , 1 , 2 , . . . , 9 p_{r}(k) = n_{k} / N = [3/25,2/25,4/25,4/25,1/25,1/25,4/25,1/25,2/25,3/25],k = 0, 1, 2, ..., 9 pr(k)=nk/N=[3/25,2/25,4/25,4/25,1/25,1/25,4/25,1/25,2/25,3/25],k=0,1,2,...,9
第四步,计算原始图像的灰度累积分布频率。
s k = ∑ i = 0 k n i N = [ 3 / 25 , 5 / 25 , 9 / 25 , 13 / 25 , 14 / 25 , 15 / 25 , 19 / 25 , 20 / 25 , 22 / 25 , 25 / 25 ] , k = 0 , 1 , 2 , . . . , 9 s_{k} = \sum_{i=0}^{k}\frac{n_{i}}{N}= [3/25,5/25,9/25,13/25,14/25,15/25,19/25,20/25,22/25,25/25],k = 0, 1, 2, ..., 9 sk=i=0∑kNni=[3/25,5/25,9/25,13/25,14/25,15/25,19/25,20/25,22/25,25/25],k=0,1,2,...,9
第五步,将归一化的 s_{k} 乘以 L-1再四舍五入,以使得均衡化后图像的灰度级与归一化前的原始图像一致。
s 0 = 3 25 ∗ ( L − 1 ) = 3 25 ∗ 9 = 1.08 s_{0} = \frac{3}{25} *(L-1) = \frac{3}{25} *9 = 1.08 s0=253∗(L−1)=253∗9=1.08,四舍五入之后其值为1,也就是说原始图像中灰度级0对应均衡化后的灰度级1,即0→1。
同理:
s_{1} = 1.8,四舍五入之后为2,即1→2;
s_{2} = 3.24,四舍五入之后为3,即2→3;
s_{3} = 4.68,四舍五入之后为5,即3→5;
s_{4} = 5.04,四舍五入之后为5,即4→5;
s_{5} = 5.4,四舍五入之后为5,即5→5;
s_{6} = 6.84,四舍五入之后为7,即6→7;
s_{7} = 7.2,四舍五入之后为7,即7→7;
s_{8} = 7.92,四舍五入之后为8,即8→8;
s_{9} = 9,四舍五入之后为9,即9→9。
以上的映射关系,就是变换函数 T 的作用。
第六步,根据以上映射关系,参照原始图像中的像素,可以写出直方图均衡化之后的图像:
以上过程即为手动计算直方图均衡化。接着,我们看一下均衡化后图像的灰度直方图,如图2所示。
在图1中,原始图像灰度值为4,5,7的像素的个数为1,
因此在图2中,这三个像素值点分别归并到相邻的灰度值中。
因为有三个灰度值归并,因此在均衡化处理后,出现了三个空位,由这些空位将原来相邻的灰度值展开(举个例子:5和6相邻,均衡化后,变成5和7相邻),故而展宽了对比度,但是归并也带来了某些相邻像素对比度的降低(举个例子:4和5相邻,均衡化后,变成5和5相邻)。这也说明了直方图均衡化方法对灰度分布比较集中的图像的处理效果比较明显。
16位或者8位直方图实现代码:
直方图均衡(支持单通道16位和8位图像).rar
文章浏览阅读1.6w次,点赞8次,收藏41次。生活中我们无时不刻不都要在网站搜索资源,但就是缺少一个趁手的资源搜索网站,如果有一个比较好的资源搜索网站可以帮助我们节省一大半时间!今天小编在这里为大家分享5款超厉害的资源搜索网站,每一款都可以让你的资源丰富精彩!网盘传奇一款最有效的网盘资源搜索网站你还在为找网站里面的资源而烦恼找不到什么合适的工具而烦恼吗?这款网站传奇网站汇聚了4853w个资源,并且它每一天都会持续更新资源;..._最全资源搜索引擎
文章浏览阅读4.5k次,点赞5次,收藏18次。阅读测试程序,设计一个Book类。函数接口定义:class Book{}该类有 四个私有属性 分别是 书籍名称、 价格、 作者、 出版年份,以及相应的set 与get方法;该类有一个含有四个参数的构造方法,这四个参数依次是 书籍名称、 价格、 作者、 出版年份 。裁判测试程序样例:import java.util.*;public class Main { public static void main(String[] args) { List <Book>_6-1 book类的设计java
文章浏览阅读613次,点赞28次,收藏27次。相比于以前的传统手工管理方式,智能化的管理方式可以大幅降低学校的运营人员成本,实现了校园导航的标准化、制度化、程序化的管理,有效地防止了校园导航的随意管理,提高了信息的处理速度和精确度,能够及时、准确地查询和修正建筑速看等信息。课题主要采用微信小程序、SpringBoot架构技术,前端以小程序页面呈现给学生,结合后台java语言使页面更加完善,后台使用MySQL数据库进行数据存储。微信小程序主要包括学生信息、校园简介、建筑速看、系统信息等功能,从而实现智能化的管理方式,提高工作效率。
传统上用户登陆状态会以 Session 的形式保存在服务器上,而 Session ID 则保存在前端的 Cookie 中;而使用 JWT 以后,用户的认证信息将会以 Token 的形式保存在前端,服务器不需要保存任何的用户状态,这也就是为什么 JWT 被称为无状态登陆的原因,无状态登陆最大的优势就是完美支持分布式部署,可以使用一个 Token 发送给不同的服务器,而所有的服务器都会返回同样的结果。有状态和无状态最大的区别就是服务端会不会保存客户端的信息。
文章浏览阅读784次。发表于10小时前| 2674次阅读| 来源TechCrunch| 19 条评论| 作者Jon EvansiOSAndroid应用开发产品编程语言JavaObjective-C摘要:即便Android市场份额已经超过80%,对于开发者来说,使用哪一个平台做开发仍然很难选择。本文从开发环境、配置、UX设计、语言、API、网络、分享、碎片化、发布等九个方面把Android和iOS_ios 开发角度
搜索引擎的发展历史可以追溯到20世纪90年代初,随着互联网的快速发展和信息量的急剧增加,人们开始感受到了获取和管理信息的挑战。这些阶段展示了搜索引擎在技术和商业模式上的不断演进,以满足用户对信息获取的不断增长的需求。
文章浏览阅读990次。对象特性是指控制对象的输出参数和输入参数之间的相互作用规律。放大系数K描述控制对象特性的静态特性参数。它的意义是:输出量的变化量和输入量的变化量之比。时间常数T当输入量发生变化后,所引起输出量变化的快慢。(动态参数) ..._控制对象特性
文章浏览阅读5.7w次,点赞50次,收藏276次。FRP搭建内网穿透1.概述:frp可以通过有公网IP的的服务器将内网的主机暴露给互联网,从而实现通过外网能直接访问到内网主机;frp有服务端和客户端,服务端需要装在有公网ip的服务器上,客户端装在内网主机上。2.简单的图解:3.准备工作:1.一个域名(www.test.xyz)2.一台有公网IP的服务器(阿里云、腾讯云等都行)3.一台内网主机4.下载frp,选择适合的版本下载解压如下:我这里服务器端和客户端都放在了/usr/local/frp/目录下4.执行命令# 服务器端给执_locyanfrp
文章浏览阅读687次。题目:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=93745#problem/A题意:给出r*c的01矩阵,可以翻转格子使得0表成1,1变成0,求出最小的步数使得每一行中1的个数相等,每一列中1的个数相等。思路:网络流。容量可以保证每一行和每一列的1的个数相等,费用可以算出最小步数。行向列建边,如果该格子是_uva12534
文章浏览阅读504次。1、Let's Encrypt 90天,支持泛域名2、Buypass:https://www.buypass.com/ssl/resources/go-ssl-technical-specification6个月,单域名3、AlwaysOnSLL:https://alwaysonssl.com/ 1年,单域名 可参考蜗牛(wn789)4、TrustAsia5、Alpha..._csdn alphassl免费申请
文章浏览阅读1.6k次。测试算法的性能 很多时候我们需要对算法的性能进行测试,最简单的方式是看算法在特定的数据集上的执行时间,简单的测试算法性能的函数实现见testSort()。【思想】:用clock_t计算某排序算法所需的时间,(endTime - startTime)/ CLOCKS_PER_SEC来表示执行了多少秒。【关于宏CLOCKS_PER_SEC】:以下摘自百度百科,“CLOCKS_PE_算法性能测试
文章浏览阅读1.2k次。fromhttps://towardsdatascience.com/finding-lane-lines-simple-pipeline-for-lane-detection-d02b62e7572bIdentifying lanes of the road is very common task that human driver performs. This is important ..._lanedetectionlite