直方图均衡化-matlab图像处理第5期(附完整代码)

Matlab|数字图像处理03|图像增强(直方图均衡化处理和定制处理)和图片复原(椒盐噪声、不同滤波器、自适应中值滤波) 图像增强和图像复原 阅读详情

概要

直方图均衡化是一种图像处理技术,用于调整图像的对比度,以改善视觉效果或为后续处理做准备。本文介绍了一个MATLAB函数histogram_equalize,它实现了对输入图像的直方图均衡化操作,并返回均衡化后的图像以及对应的直方图。该函数首先检查输入是否为彩色图像,如果是,则将其转换为灰度图像。然后计算原始图像的直方图,并基于累计分布函数(CDF)映射新的灰度值,最后应用这些新值到输出图像中,并计算均衡化后的直方图。

整体架构流程

  1. 检查并转换图像:如果输入图像是彩色的(即有三个颜色通道),则使用加权平均法将其转换为灰度图像。
  2. 初始化和预处理:将图像数据类型转换为双精度浮点数,以便进行数学运算,并初始化必要的变量和矩阵。
  3. 计算原始直方图:统计每个灰度级别的像素出现次数,生成直方图。
  4. 计算累计分布函数(CDF):基于原始直方图计算CDF,并根据其结果确定新的灰度级别。
  5. 应用直方图均衡化:根据计算出的新灰度级别更新图像中的每一个像素。
  6. 计算均衡化后的直方图:再次统计每个灰度级别的像素出现次数,得到均衡化后的直方图。

技术名词解释

  • 直方图均衡化:一种图像增强方法,通过重新分配图像中的亮度值来提高图像对比度。
  • 累计分布函数 (CDF):累积概率分布函数,在直方图均衡化中用来确定新的灰度值。
  • 灰度级:表示图像中不同亮度水平的数量,通常从0(黑色)到255(白色)。

技术细节

代码原理及注释

function [equalized_image, equalized_hist] = histogram_equalize(input_image)
    % 如果是彩色图像,转换为灰度图像
    if size(input_image, 3) == 3
        input_image = (0.2989 * input_image(:,:,1) + 0.5870 * input_image(:,:,2) + 0.1140 * input_image(:,:,3));
    end
  
    img = im2double(input_image); % 将图像转换为双精度浮点数格式
    img_out = zeros(size(img)); % 初始化输出图像矩阵
    [m, n] = size(img); % 获取图像尺寸
    
    % 计算直方图
    h = zeros(1, 256); % 初始化直方图向量
    for i = 1:m
        for j = 1:n
            gray_value = round(img(i,j) * 255) + 1; % 转换灰度值范围到[1, 256]
            h(gray_value) = h(gray_value) + 1; % 统计每个灰度值的出现次数
        end
    end
    h = h / (m * n); % 归一化直方图
    
    s = zeros(1, 256); % 创建输出灰度值向量
    rk = 0.0; 
    
    % 计算累计分布函数(CDF)并映射到新的灰度值
    for i = 1:length(h)
        rk = rk + h(i);
        s(i) = round(rk * 255); % 映射到[0, 255]范围内的新灰度值
    end
    
    % 应用直方图均衡化
    for i = 1:m
        for j = 1:n
            gray_value = round(img(i,j) * 255) + 1; % 获取灰度值并调整索引
            img_out(i,j) = s(gray_value) / 255; % 映射到[0, 1]范围
        end
    end
    
    equalized_image = img_out;
    
    % 计算均衡化后的直方图
    equalized_hist = zeros(1, 256); 
    for i = 1:m
        for j = 1:n
            gray_value = round(equalized_image(i,j) * 255) + 1; % 再次转换灰度值范围
            equalized_hist(gray_value) = equalized_hist(gray_value) + 1;
        end
    end
    equalized_hist = equalized_hist / (m * n); % 归一化直方图
end

注意事项

  • 输入检查:此代码假设输入图像可以是单通道灰度图像或三通道RGB彩色图像。对于彩色图像,使用标准的RGB到灰度转换公式进行转换。
  • 数据类型转换:使用im2double函数将图像转换为双精度浮点数格式,确保所有数学运算都能准确执行。
  • 直方图计算:这里直接遍历图像的所有像素来构建直方图。对于大尺寸图像,这种逐个像素处理的方法可能会比较慢,可以考虑利用MATLAB内置的直方图函数如imhist来提高效率。
  • 累计分布函数 (CDF) 和灰度映射:通过累加归一化的直方图来构建CDF,并以此为基础定义新的灰度映射关系。
  • 直方图均衡化应用:根据新的灰度映射更新图像中的每一个像素值,实现直方图均衡化。
  • 均衡化后直方图计算:与前面类似,再次遍历图像以统计均衡化后的灰度分布情况。

小结

上述MATLAB代码实现了直方图均衡化算法,这是一种常用的图像增强技术,能够有效地提升图像对比度,尤其适用于低对比度或特定区域对比度不足的图像。此代码提供了一个完整的直方图均衡化过程示例,包括了图像转换、直方图计算、累计分布函数构建、灰度映射以及最终的直方图均衡化应用。此外,代码还展示了如何计算均衡化前后的直方图,这对于评估均衡化效果非常有用。用户可以根据具体需求进一步优化这段代码,例如引入更高效的直方图计算方法或者扩展支持多通道图像的直方图均衡化。

【matlab图像处理】直方图均衡化操作 【路漫漫其修远兮,吾将上下而求索】 今天介绍图像的直方图均衡化操作。本内容参考自《实用MATLAB图像和视频处理》第9章。 阅读详情

相关推荐

【matlab图像处理】直方图均衡化

【路漫漫其修远兮,吾将上下而求索】 今天介绍图像的直方图均衡化。本内容参考自《实用MATLAB图像和视频处理》第9章。

learning CV 5568

matlab图像处理直方图均衡化、规定化代码

图像处理作业,参考了别人的代码

qq_35469862的博客 4639

直方图均衡化—matlab实现

步骤: 统计原图像素每个像素的个数 统计原图像 家里灰度级得映射规则 将原图每个像素点的灰度映射到新图 代码: clear all I=imread('1.jpg'); %读入JPG彩色图像文件 imshow(I) %显示出来 title('输入的彩色JPG图像') I_gr

5万+

matlab几种直方图均衡化方法学习笔记(HE、AHE、CLAHE附代码)

通过将图像的灰度直方图从较为集中的某灰度区间拉伸到全部灰度范围内均匀分布,以此来扩大图像像素灰度值的分布范围,从而达到改善图像颜色和对比度的目的。简单说,就是把原来的图像的灰度分配均匀,使得0-255都有一定的取值。当某个区域包含的像素值非常接近,其区域的直方图就会尖状化,此时直方图的变换函数会将一个很窄范围内的像素映射到整个像素范围。②类似模板卷积的方式,以待处理的点为中心,取其邻域为子块,在子块内做直方图处理,处理结果仅映射到该点可以消除块效应,但需要对每个点计算一次直方图处理,效率低;

jin_Arile的博客 1万+

直方图均衡化 原理、流程、公式推导及matlab实现

附上按照上述流程实现的MATLAB代码: clc;close all;clear all; H= imread('测试图\lena512.bmp'); H=H(:,:,1); %判断是否为三通道彩色图片 若是 则将其灰度化 if length(size(H))>2 H=rgb2gray(H); end %获取图片的尺寸 便于计算总像素数 即m*n [m,n]=size(H); %生成一个一行256列的矩阵 p=zeros(1,256); % 统计各灰度的像素个数...

weixin_42845306的博客 9958

Matlab直方图均衡化及直方图匹配, 空间滤波(均值滤波及中值滤波),并计算信噪比

一.内容 (1)直方图均衡化及直方图匹配; (2)空间滤波(均值滤波及中值滤波),并计算信噪比。 二.结果 1.直方图均衡化     图1 直方图均衡化   2.直方图匹配   图2 直方图匹配 3.空间滤波   图3 空间滤波 三.程序完整代码 主程序: %第一部分:直方图均衡及直方图匹配 %直方图均衡化 clear; L = 2

wulafly的博客 9117

数字图像处理Matlab-灰度直方图及直方图均衡化(附代码)

目录1.Objectives:2.Experiment Content:3.Experiment Principle:4.Experiment Steps Result and Conlusion:5.Appendix(programs and images): 1.Objectives: 1、 熟悉灰度直方图的概念及计算方法; 2、 熟悉直方图均衡化的计算过程; 3、 计算并绘制图像直方图,实现...

1万+

【图像算法&MATLAB】一文讲明白:图像的直方图均衡化(附作者自编源代码)

写作时间:2020-07-29 目录: 1.前言 2.代码 3.总结 正文 1.前言 直方图均衡(Histogram equalization)是利用直方图分布,计算累加函数,按照累加函数做映射,能够提升图像对比度。 本文我会从每一个小的步骤编写,说明,并给出每一阶段的结果,让你完全搞懂其原理。 直方图均衡示例: 2.代码 2.1 使用Matlab 自带函数 %直方图均衡 Histogram equalization Iin = imread('tire.tif'); Iout=histeq(Iin);

wind 4981

【数字图像处理笔记】Matlab实现直方图均衡化 (一)

第一种(直接调用Matlab内置函数): G=imread('Fig0111(katrina_2005_08_29_NOAA).tif'); J=histeq(G); %直方图均衡化,这一个函数就可以做到均衡化的效果 figure, subplot(121),imshow(uint8(G)); title('原图') subplot(122),imshow(uint8(J)); title('均衡化后') figure, subplot(121),imhist(G,64); title('原图像直方图')

JMFive的博客 1万+

Ubuntu 上 1Panel 的安装与高效运维实践

本文详细介绍了在Ubuntu系统上安装和高效运维1Panel面板的完整实践指南。内容涵盖了一键安装、Docker容器可视化部署、计划任务自动化以及网站数据库管理等核心功能,并提供了安全加固、资源监控与数据备份等进阶技巧,旨在帮助用户快速搭建并管理一个强大易用的服务器环境。

weixin_29210759的博客 141

AVL-Excite新手必看:5步搞定发动机阀系系统建模(附B站视频教程)

本文为AVL-Excite新手提供发动机阀系系统建模的5步详细指南,涵盖软件环境搭建、基本结构建立、关键参数设置、仿真分析及常见问题排查。通过清晰的步骤说明和实用技巧,帮助工程师快速掌握建模方法,并附有精选B站视频教程链接,便于实践学习。

weixin_29305313的博客 502

MATLAB--数字图像处理 图像直方图均衡化

图像直方图均衡化 首先,我们要理解什么是图像直方图均衡化: 把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布,具体见下图(说的简单点,就是把原来的图像的灰度分配均匀,使得0-255都有一定的取值,这样对比度相对...

海到无边天作岸 山登绝顶我为峰 2万+

EnlightenGAN训练复现记录

记录EnlightenGAN过程中的问题和解决方式。提示:以下是本篇文章正文内容,下面案例可供参考。

L_27N113E的博客 3846

Matlab图像处理转灰度图,绘制直方图,直方图均衡化

1.imread() MATLAB中图像读取函数与OpenCV一样是imread,可以打开指定路径图片,其路径表示方式与OpenCV中有些许不同如: srcImage=imread('E:\MatlabWorkSpace\实验一\实验一图一.png'); 路径符号为单"\",Opencv为双"\",其函数原型为: A=imread(filename,fmt); 2.将打开的图

烟雨博客 5万+

Kolla 容器化 高可用OpenStack 部署与 Ceph 集群集成

本文介绍了 Kolla 项目在容器化 OpenStack 部署和管理方面的应用,以及与 Ceph 集群的集成。Kolla 项目通过容器技术提供了一种简化和自动化的 OpenStack 部署方法,同时实现了易于升级和回滚的特点。本文还探讨了 Kolla 在实现零宕机升级方面的进展,并分析了其对 OpenStack 用户和社区的重要意义。

we22635的博客 2701

抖音 webmssdk 签名算法解析:X-Dynosaur / X-Gnarly / X-Bogus 生成原理

它只依赖设备指纹/环境编码与随机数,与 query 内容无关,因此可以独立于 Dynosaur/Gnarly 生成。

猫敷雪 197

MATLAB-真彩色图像直方图均衡化及分别在RGB与HSI坐标系进行处理

本文主要讲解了灰度直方图的概念,以及灰度直方图均衡化的流程及代码,再通过灰度值均衡化实现真彩色图像的直方图均衡化

weixin_53447776的博客 1万+

GVINS数据采集(u-blox fp9 + D435i)

1、配置千寻的RTK账号 采集数据当天购买千寻的RTK账号,然后在Window下,输入账号和密码 (具体的步骤如之前面连接所示),查看u-center软件上的信息,确保接收机可以收到RTK信息; 2、查看Linux系统下u-blox是否可以正常接受GPS信号和RTK数据流 1、GPS信号信息 // 打开端口 1 cd ublox_f9p/src // 或者在终端1下也可以 source devel/setup.bash r.....................

努力努力努力 2609

【MATLAB图像处理】直方图均衡化

通过观察四种状态pollen.jpg的均衡后直方图可以得到:对比度高的图作直方图均衡化处理前后得到的图像变化不大,因为均衡化会拉宽像素的灰度分布,而高对比度意味着灰度宽度本就较宽即细节更丰富,因此对高对比度的图像做均衡化处理就不会差生太大的差异。总之,imhist()函数是一种非常有用的图像处理函数,它可以帮助用户快速计算和可视化图像的直方图,从而更好地理解和分析图像的灰度级分布情况。均衡化图像亮度:直方图均衡化可以将图像的亮度均衡化,使得图像的整体亮度更加均匀,从而避免了图像中出现过亮或过暗的区域。

weixin_51659968的博客 5022

Aip1640、TM1640驱动程序

本文介绍了AIP1640/TM1640驱动芯片的编程实现,主要包括硬件接口定义和通信协议函数。通过宏定义配置时钟(CLK)和数据线(DIO)的GPIO控制,实现了I2C协议的启动、停止、字节发送等基本操作。核心函数AIP1640_Disp_Drive()完成显示驱动流程:先发送0x40命令设置地址自增模式,再发送0xC0起始地址和16字节显示数据,最后设置亮度参数。文中还包含5微秒延时函数、显示数据缓冲区定义,以及LED和数码管(SMG)的位映射注释说明。该代码适用于控制LED数码管显示,支持亮度调节功能。

zqx的博客 1400

论文阅读:ICLR 2026 Breaking and Fixing Defenses Against Control-Flow Hijacking in Multi-Agent Systems

该论文首先系统阐述了控制流劫持攻击的核心机理。此类攻击通过操纵多智能体系统的编排机制,诱导系统执行非安全操作,进而实现敏感信息窃取。攻击者将恶意指令伪装成环境错误信息,借助可信代理传递至系统编排器,利用"困惑副手"漏洞绕过传统安全防线。该论文指出,现有防御方案如LlamaFirewall所依赖的对齐检查机制存在根本性局限——安全目标与功能需求之间存在不可调和的内在冲突。该论文的核心贡献体现在攻防两个维度。

CSPhD-winston的博客 493

图像处理之直方图均衡化

1. 图像直方图    1.1 灰度直方图     图像的灰度直方图是图像灰度级的函数,表示数字图像中每一灰度级与其出现频数(呈现该灰度的像素数目)之间的统计关系。通常,用横坐标表示灰度级(000~255255255),纵坐标表示频数或相对频数(呈现该灰度级的像素出现的概率)。     灰度直方图的定义如下式所示: P(rk)=nkNP(r_k)=\frac{n_k}{N} P(rk​)=Nnk​​
 式中,NNN是图像的像素总数,nkn_knk​是第kkk级灰度的像素数目,rkr_krk​表示第kkk个灰

一叶_障目 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

数字图像处理---直方图均衡化与规定化(MATLAB实现含源码)

数字图像处理---直方图均衡化与规定化实验(MATLAB实现)

OpenCV学习笔记 1万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

MATLAB图像处理-图像增强之直方图均衡化(自己编写函数)

首先我们要了解直方图均衡化的作用和优势,以下介绍来自 喂鸡百科: 这种方法通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。 这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼......

留缘的博客 2万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Matlab实现图像灰度图,绘制直方图,直方图均衡化

1.imread() MATLAB中图像读取函数与OpenCV一样是imread,可以打开指定路径图片,其路径表示方式与OpenCV中有些许不同如: srcImage=imread('E:\MatlabWorkSpace\实验一\实验一图一.png'); 路径符号为单"\",Opencv为双"\",其函数原型为: A=imread(filename,fmt); 2.将打开的图像转换为灰度图r...

qq_41581769的博客 2万+

数字图像处理:直方图均衡化、空域滤波、锐化——matlab实现

直方图均衡化、空域滤波的均值滤波与中值滤波、锐化的拉普拉斯算子的matlab实现

qq_46056318的博客 1万+
上一篇: 形态学操作&图像分割&边缘检测&连通区域-matlab图像处理第4期(附完整代码)
下一篇: MATLAB添加伽马分布噪声-matlab图像处理第6期(附完整代码)
QQ44650067
博客等级 码龄9年 1085粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值