数字图像处理——直方图的均衡化

1.方法简介:

直方图均衡化通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。

这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。这种方法的一个主要优势是它是一个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直方图,并且计算量也不大。这种方法的一个缺点是它对处理的数据不加选择,它可能会增加背景噪声的对比度并且降低有用信号的对比度。

直方图均衡技术将原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布, 由于其算法简单, 无需借助外来因素的参数设置,可以自成系统的运行, 有效地增强图像对比度, 是一种常用的图像增强方法. 一直以来, 直方图均衡技术受到各个领域的重视, 比如在消费类电子产品邻域, 在均衡图像的同时希望保持图像的亮度信息 。

实现过程:

2.实现过程:

我们来看一个灰度图像,让ni表示灰度i出现的次数,这样图像中灰度为i 的像素的出现概率是

L 是图像中所有的灰度数,n 是图像中所有的像素数, p 实际上是图像的直方图,归一化到 0..1。

把 c 作为对应于 p 的累计概率函数, 定义为:

c 是图像的累计归一化直方图。

我们创建一个形式为 y = T(x) 的变化,对于原始图像中的每个值它就产生一个 y,这样 y 的累计概率函数就可以在所有值范围内进行线性化,转换公式定义为:

yi = T(xi) = c(i)

注意 T 将不同的等级映射到 0..1 域,为了将这些值映射回它们最初的域,需要在结果上应用下面的简单变换:

上面描述了灰度图像上使用直方图均衡化的方法,但是通过将这种方法分别用于图像RGB颜色值的红色、绿色和蓝色分量,从而也可以对彩色图像进行处理。

 3.调用系统的均衡化函数:

import cv2
import numpy as np
import matplotlib.pyplot as plt# 读取图像
img = cv2.imread('1.png', 0)# 对图像进行直方图均衡化
equ = cv2.equalizeHist(img)# 显示原始图像和均衡化后的图像
plt.subplot(2, 1, 1), plt.imshow(img, cmap='gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(2, 1, 2), plt.imshow(equ, cmap='gray')
plt.title('Histogram Equalized'), plt.xticks([]), plt.yticks([])plt.show()

 

 

4.自定义均衡化函数的代码:


import cv2
import numpy as np
import matplotlib.pyplot as plt
def def_equalizehist(img,L=256): #自定义直方图的均衡话img=cv2.imread(img,flags=0)h,w=img.shapehist=cv2.calcHist([img],[0],None,[256],[0,255])hist[0:255]=hist[0:255]/(h*w)sum_hist=np.zeros(hist.shape)for i in range(256):sum_hist[i]=sum(hist[0:i+1])equal_hist=np.zeros(sum_hist.shape)for i in range(256):equal_hist[i]=int((L-1)*sum_hist[i])equal_img=img.copy()for i in range(h):for j in range(w):equal_img[i,j]=equal_hist[img[i,j]]equal_hist=cv2.calcHist([equal_img],[0],None,[256],[0,255])equal_hist[0:255]=equal_hist[0:255]/(h*w)return [equal_img,equal_hist]
if __name__=='__main__':img="./1.png" #图片所在路径def_img, def_hist=def_equalizehist(img)x=np.linspace(0,255,256)plt.subplot(1,2,1),plt.plot(x,def_hist,'-r')plt.show()ori_img=cv2.imread(img,0)cv2.imshow('oir_img',ori_img)cv2.imshow('def_img',def_img)cv2.waitKey()

5.实现效果:

初始图片: 

 均衡化后的图片:

 均衡化后的直方图:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/778579.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电源66319D控制方法

实现自动化控制,电源为基础的模块,下面为大家讲解电源66319D的控制逻辑。 新建底层控制逻辑 在文件basis_contorl.py中写入仪器控制底层代码,代码如下: import tkinter.messagebox import pyvisaclass InstrumentControl(object…

探析Zoho Projects项目管理系统功能优势

世上万物,都是有难有易,有简单,也有复杂,项目也不例外。面对复杂的项目,应该如何有效管理呢?答案无疑是项目管理系统,项目管理系统有哪些强大的功能?Zoho Projects项目管理系统的功能…

Qt中常用宏定义

Qt中常用宏定义 一、Q_DECLARE_PRIVATE(Class)二、Q_DECLARE_PRIVATE_D(Dptr, Class)三、Q_DECLARE_PUBLIC(Class)四、Q_D(Class) 和 Q_Q(Class) 一、Q_DECLARE_PRIVATE(Class) #define Q_DECLARE_PRIVATE(Class) inline Class##Private* d_func() { # 此处的 d_ptr 是属于QOb…

【数据分层方法论】初稿

一般标准数据架构有(ODS、DWD、DWS、DIM、ADS) 一般数据构架问题: 1.架构定位与边界不清楚,导致ADS烟囱化开发; 2.ADS集市缺少统一规划、混乱低效; 3.ADS集市指标口径急需要统一; 4.缺少高质量的设计标准,…

LeetCode 面试经典150题 290.单词规律

题目: 给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。 思路:一一映射需要用到…

要提升视频面试效率,需要留意以下几点

在当今远程工作的世界里,视频面试对于成功招聘至关重要。在这个过程中,过度沟通,要有耐心,提供电子产品,并表现出同理心。 随着世界转向远程工作,视频面试已经开始成为维持成功招聘策略的重要组成部分。多…

政安晨:专栏目录【TensorFlow与Keras实战演绎机器学习】

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras实战演绎机器学习 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 本篇是作者政安晨的专栏《TensorFlow与Keras…

监听页面的使用时间

如果是比较新的vue架构(推荐,参考若依) 监听create()和destory()两个函数,写通用的js调用函数,在路由守卫的时候使用,就可以获取到每个页面停留时间 如果是比…

碳素光线疗法与宠物健康

碳素光线与宠物健康 生息在地球上的所有动物、在自然太阳光奇妙的作用下、生长发育。太阳光的能量使它们不断进化、繁衍种族。现在、生物能够生存、全仰仗于太阳的光线。太阳光线中、包含有动物健康所需要的极为重要的波长。因此、和户外饲养的动物相比、在室内喂养的观赏动物、…

比较AI编程工具Copilot、Tabnine、Codeium和CodeWhisperer

主流的几个AI智能编程代码助手包括Github Copilot、Codeium、Tabnine、Replit Ghostwriter和Amazon CodeWhisperer。 你可能已经尝试过其中的一些,也可能还在不断寻找最适合自己或公司使用的编程助手。但是,这些产品都会使用精选代码示例来实现自我宣传…

无货源采集软件必备API--支持多平台爆款采集-淘宝-天猫-拼多多-整店采集和淘客功能

如何获取API测试权限? item_get 获得淘宝商品详情item_get_pro 获得淘宝商品详情高级版item_review 获得淘宝商品评论item_fee 获得淘宝商品快递费用item_password 获得淘口令真实urlitem_list_updown 批量获得淘宝商品上下架时间seller_info 获得淘宝店铺详情item…

Ubuntu通过分用户进行多版本jdk配置

前言:本文内容为实操记录,仅供参考! linux安装jdk参考:http://t.csdnimg.cn/TeECj 出发点:最新的项目需要用jdk17来编译,就把服务器的jdk版本升级到了17,但是有一些软件例如nexus还需要jdk1.8进…

增强现实(AR)的开发工具

增强现实(AR)的开发工具涵盖了一系列的软件和平台,它们可以帮助开发者创造出能够将虚拟内容融入现实世界的应用程序。以下是一些在AR领域内广泛使用的开发工具。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎…

【前端面试3+1】04浏览器存储、flex布局属性和常用指令、 promise和async await区别

一、浏览器存储 1.1类型: 浏览器数据存储的方式有以下几种: Cookie:小型文本文件,存储在用户计算机上,可以通过浏览器传输到服务器。Web Storage:包括LocalStorage和SessionStorage,可以在浏览器…

ES-LTR粗排模块

ES-LTR粗排模块 官方资源:https://github.com/HeiBoWang/elasticsearch-learning-to-rank Elasticsearch学习排名插件使用机器学习提高搜索相关性排名。它为维基媒体基金会和Snagajob等地方的搜索提供了动力! 这个插件有什么功能 此插件: …

I.MX6ULL_Linux_系统篇(25) buildroot文件系统构建

前面我们学习了如何使用 busybox 来构建根文件系统,但是 busybox 构建的根文件系统不齐全,很多东西需要我们自行添加,比如 lib 库文件。在我们后面的驱动开发中很多第三方软件也需要我们自己去移植,这些第三方软件有很多又依赖其他…

ubuntu 不产生core dump 文件

目标机器:UBuntu2004 目的:产生coredump 文件 ulimit -c //未设置之前 0ulimit -c unlimited //大小不受限设置 #将1写入到该文件里 echo 1 > /proc/sys/kernel/core_uses_pid mkdir /corefile #这里一定不要加“” echo “/corefile/core-%e…

5.6 物联网RK3399项目开发实录-Android开发之U-Boot 编译及使用(wulianjishu666)

物联网入门到项目实干案例下载: https://pan.baidu.com/s/1fHRxXBqRKTPvXKFOQsP80Q?pwdh5ug --------------------------------------------------------------------------------------------------------------------------------- U-Boot 使用 前言 RK U-B…

【CKA模拟题】如何用Nslookup轻松检查集群服务名的DNS解析?

题干 For this question, please set this context (In exam, diff cluster name) kubectl config use-context kubernetes-adminkubernetes Create an nginx pod named nginx-pod-cka using the nginx image, and expose it internally with a service named nginx-service-…

大宋咨询(深圳满意度调查)如何进行客户满意度电话调查

在这个竞争激烈的市场环境中,客户满意度已经成为企业生存和发展的关键。在进行客户满意度电话调查时,关键是要确保调查过程的专业性、准确性和有效性。为了帮助您了解客户的需求,提高客户满意度,以下大宋咨询(深圳业主…