原文请参考以下博文,代码是直接借鉴的,指出了一些问题。

https://blog.csdn.net/weixin_37139761/article/details/83386790

以下是原博文贴出的代码,并做了一些修改。

function [img2, func_T] = myHistogramEqualization(img)
    img1 = double(img);
    [r,c,l] = size(img1)%获取图像的高r和宽c
    %统计图像中每个灰度级出现的次数
    count = zeros(1,256);
    for i=1:r
        for j=1:c
            count(1,img(i,j)+1) = count(1,img(i,j)+1)+1;
        end
    end
    %统计图像中每个灰度级出现的概率
    p = zeros(1,256);
    for i=1:256
        p(1,i) = count(1,i)/(r*c);
    end
    img2 = im2uint8(ones(r,c));%创建一个r X c大小的1矩阵
    
    func_T = zeros(1,256);%变换函数
    p_sum = 0;
    %求直方图均衡化的变换函数
    for k = 1:256
        p_sum = p_sum + p(k);%求每个灰度级的概率之和
        func_T(k) = (256-1)*p_sum;%根据变换函数的公式求和
    end
    
    func_T_z =  round(func_T);%对变换函数进行取整
    %完成每个像素点的映射
    for i = 1:256   % 此时的i是概率和
        findi = find(func_T_z==i);%找到灰度概率和是i时对应的灰度值
        len = length(findi);
        for j=1:len
            findj = find(img==(findi(j)-1));%进行对应每个像素点的映射
            img2(findj) = i;
        end
    end
end

直方图均衡化的原理很多博文都有,这里不再涉及。对于上述代码,在运行后会发现有些奇怪的噪点。代码先统计各个像素的灰度值出现的次数,然后计算灰度值0-255的概率密度函数p,然后求概率分布函数(也就是概率累计)func_T,对概率分布函数线性映射到0-255并取整。直方图变换函数其实就是概率分布函数,落在分布函数每个点上的灰度可能不止一个。实验用的lena.bmp,最小灰度是24,最大灰度是245,但是概率分布在1上的灰度是33 34 35 36,也就是说,图像中所有灰度为33到36的像素点的个数占总像素的1%。这么理解也没问题,但是矛盾出来了,明明图像中有小于灰度是33的像素,为什么概率分布为1对应的像素是33-36呢?仔细看代码后发现,源代码中 findi = find(func_T_z==i); 的i是从1开始的,但是func_T_z给四舍五入到0-255,因此代码更改一点即可:findi = find(func_T_z==(i-1));下图(左)是原代码效果,可见帽檐左侧有一些白点,改完以后的效果如右图所示。左下为原始图像。可见,相比于原图像, 经过直方图均衡化后的图像对比度更强。

直方图均衡化的代码解析相关推荐

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

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

  2. OpenCV基础(16)OpenCV直方图均衡化和自适应直方图均衡化(CLAHE)

    在本教程中,您将学习使用OpenCV实现直方图均衡化和自适应直方图均衡化(CLAHE). 直方图均衡化是一种基本的图像处理技术,通过更新图像直方图的像素强度分布来调整图像的全局对比度.这样做可以使低对 ...

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

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

  4. python高通滤波器设计_python实现直方图均衡化,理想高通滤波与高斯低通滤波

    写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验二,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验二. 由于时间紧张,代码没有进行任何优化, ...

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

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

  6. 【机器视觉学习笔记】直方图的绘制及直方图均衡化(C++)

    目录 概念 直方图定义 直方图均衡化 为什么要选用累积分布函数 如何运用累积分布函数使得直方图均衡化 C++ 源码 直方图均衡化 绘制直方图 主函数 效果 完整源码 平台:Windows 10 20H ...

  7. [Python从零到壹] 五十四.图像增强及运算篇之局部直方图均衡化和自动色彩均衡化处理

    首先,祝大家教师节和中秋节快乐! 欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文 ...

  8. python+opencv图像处理之七:直方图均衡化

    python+opencv图像处理之七:直方图均衡化 目录 python+opencv图像处理之七:直方图均衡化 一.直方图均衡化 二.直方图绘制 三.直方图均衡化 四.有限对比适应性直方图均衡化 一 ...

  9. Python 图像处理OpenCV:直方图均衡化(笔记)

    进行了直方图的均衡化和限制对比度的直方图均衡化. 代码如下: import cv2 as cv import matplotlib.pyplot as plt # 直方图均衡化 def img_his ...

最新文章

  1. Office word中mathtype公式与LaTex公式代码互转
  2. 实现基于 ASP.NET Forms 身份验证的跨子域单点登录
  3. 了解SQL Server审核
  4. iOS 审核之 Performance - 2.5.2 被拒 dlopen(), dlsym(), respondsToSelector:, performSelector
  5. oracle11.2.0.4使用impdp导入时报错:ORA-39083 ORA-00439
  6. Tomcat中文乱码解决
  7. Excel学习笔记3||逻辑函数AND、OR、NOT、XOR、IF、IFS和查找函数VLOOKUP
  8. android手机平板如何使用usb有线网卡
  9. 好用的影子系统软件,系统辅助工具
  10. UPC 黑熊过河(基本状态转移)
  11. springboot整合thumbnailator实现图片处理
  12. linux蜂鸣器驱动指令,Linux 设备驱动简析—PC蜂鸣器驱动
  13. 五一放一天不调休,你能接受吗?
  14. CMD命令查看局域网内所有主机名及IP
  15. Simscape/Simulink 电力仿真降压电路 Buck Converter
  16. Part 5 多元函数基础
  17. 【阿里云高校计划】导论-视觉AI技术应用探索 day1 【一见钟情】
  18. 获奖最多的这届中国赛艇、皮划艇队,借助了怎样的科技?
  19. 薪酬模块常用文件资料 (参考案例)
  20. Iterator遍历

热门文章

  1. redis 判断存在性_一口气说出四种幂等性解决方案,面试官露出了姨母笑~
  2. mysql用来干嘛的_CPU占用又爆了?MySQL到底在干什么
  3. python groupby agg_Python数据分析:探索性分析
  4. java 动态报表 sql,报表SQL
  5. python常用标准库的基本用法_[每天一个python小技巧]Python中标准库OS的常用方法总结...
  6. mysql 主从 不一致_揭秘MySQL主从数据不一致
  7. Python-Matplotlib可视化(1)——一文详解常见统计图的绘制
  8. c51单片机时钟程序汇编语言,51单片机汇编语言--延时程序的延时时间
  9. ioswebview混编_iOS与H5混编--优秀的第三方框架WebViewJavascriptBridge
  10. ssh密钥登录 改密码登录_如何使用密钥对通过SSH登录而不使用密码