前些天数字图像处理课上老师留了一个作业,要求自选一副图像对其做直方图均衡化处理,然后对图像进行灰度变换,使变换后的图像大致具有下图所示归一化直方图的趋势,并绘制直方图。

histeq 是MATLAB里面直方图均衡化的函数,这里我们不用它手动实现直方图均衡化,以加深对图像直方图均衡化操作的理解。我们还是先使用histeq来写一下直方图均衡化的程序,然后跑一下看看结果:

I = imread('C:\Users\Administrator\Desktop\静静.jpg');
figure(1);
subplot(211);imshow(I);subplot(212);imhist(I);
[J,T] = histeq(I);
figure(2);subplot(211);imshow(J);subplot(212);
imhist(J);figure(3);plot([0:255]/255,T);

嗯,还是比较简单的嘛,看着效果也不错,这个代码大家可以自己试一下嘛。

接下来我们来完成上面的作业,代码如下:

clcclear all%预处理I =imread('C:\Users\Administrator\Desktop\静静.jpg');  %读图GI=rgb2gray(I); %彩色图转灰度图Grey_Image%展示原图figure('NumberTitle', 'on', 'Name', '原图像');imshow(I),title('小姐姐');%展示原灰度图及直方图figure('NumberTitle', 'on', 'Name', '原灰度图像');subplot(2,1,1);imshow(GI),title('灰度图像');subplot(2,1,2);imhist(GI),title('直方图');%图像均衡化处理过程[M,N]=size(GI);GI1=reshape(GI,M*N,1);GI1_sort=sortrows(GI1);%按灰度值排序方便统计[a, b, c] = unique(GI1_sort);%a为不同种灰度值数组,b为不同灰度值第一次出现的索引号%统计每个灰度值的个数,计算概率for i=1:size(a)-1num(i)=b(i+1)-b(i);p(i)=num(i)/(M*N);endnum(i+1)=M*N-b(i+1)+1;p(i+1)=num(i+1)/(M*N);%计算像素映射关系sum=0;for i=1:size(a)sum=sum+p(i);s(i)=sum;ss(i)=floor((double(max(GI1)-min(GI1))*s(i))+0.5); %有的均衡化理论中不是该图像最大灰度值减去最小灰度值,而是(2^n-1)-0end%对原图进行映射for i=1:M*NGI_new1(i)=ss(find(a==GI1(i))) ;endGI_new=uint8(reshape(GI_new1,M,N));%展示均衡化后的图像和直方图figure('NumberTitle', 'on', 'Name', '均衡化处理结果')subplot(2,1,1);imshow(GI_new),title('灰度图像');subplot(2,1,2);imhist(GI_new),title('直方图');%预设规定化概率密度值%索引1-255代表像素0-254,没有计算第256是因为加上那一个概率后总概率超过1了for i=1:128p1(i)=-1/127^2*(i-1)+1/127;endfor i=129:255  p1(i)=1/127^2*(i-2)-1/127;end%计算像素映射关系sum1=0;for i=1:255sum1=sum1+p1(i);s1(i)=sum1;ss1(i)=floor((254*s1(i))+0.5);%同上,有的均衡化理论中不是254-0=254,而是(2^8-1)-0=255end%将均衡图像映射到规定化图像[a1, b1, c1] = unique(ss1);%a1为不同种灰度值数组,b1为不同灰度值第一次出现的索引号for i=1:M*Nflag=find(a1==GI_new1(i)); %flag用于判断均衡后像素是否在规定化映射中找得到if isempty(flag)GI_regular1(i)=GI_new1(i);elseGI_regular1(i)=b1(find(a1==GI_new1(i)))-1;endendGI_regular=uint8(reshape(GI_regular1,M,N));%展示规定化后的图像和直方图figure('NumberTitle', 'on', 'Name', '规定化处理结果')subplot(2,1,1);imshow(GI_regular),title('灰度图像');subplot(2,1,2);imhist(GI_regular),title('直方图');

什么你问我静静是谁,当然是我喜欢的一个小姐姐,是个美女了,不信你们看嘛

然后给你们看看处理后的结果

原灰度图和直方图:

均衡化后的结果和直方图分布:

规定化后的结果和直方图分布;

嗯!效果还是蛮不错的嘛,没有小姐姐的图片我才不愿意做这作业呢。

奥,有小伙伴看不懂代码想知道计算过程,那我就后续补上。

直方图均衡化请点这儿:

https://blog.csdn.net/macunshi/article/details/79815870

直方图规定化请戳这儿:

https://blog.csdn.net/macunshi/article/details/79819263

图像增强之直方图均衡化(不用histeq)与直方图规定化相关推荐

  1. OpenCv:直方图均衡化(HE),自适应直方图均衡化(AHE),限制对比度自适应直方图均衡化(CLAHE)

    总结了使用Python OpenCv处理图像直方图均衡化(HE),自适应直方图均衡化(AHE),限制对比度自适应直方图均衡化(CLAHE)的方法. 目录 直方图均衡化(HE) 自适应直方图均衡化(AH ...

  2. 线性变换,分段线性变换,伽马变换,直方图正规化,直方图均衡化,局部自适应直方图均衡化的原理以及python代码

    1.基础概念 1.1 图像灰度直方图 灰度直方图是图像灰度级的函数,用来描述每个灰度级在图像矩阵中的像素个数或者占有率.图像的对比度是通过灰度级范围来度量的,而灰度级范围可通过观察灰度直方图得到,灰度 ...

  3. 图像增强及直方图均衡化在图像去雾上的应用(附matlab代码)

    一.图像增强技术介绍 简单进行一个背景介绍:图像增强就是将一幅图中需要的信息增强,消弱或去除不需要的信息的一种处理技术,可以达到改善图像质量的作用. 根据处理空间的不同,可以分为空域增强和频域增强两种 ...

  4. 图像增强-直方图均衡化

    一:设计方案原理 先采用直方图均衡化的方法进行增强,如果对比度不太好,可以采用分段线性变换或幂函数变换等其他的方法做另一种处理.直方图均衡化是通过对原图像进行某种变换使原图像的灰度直方图修正为均匀的直 ...

  5. MATLAB图像处理-图像增强之彩色图像直方图均衡化(RGB通道和HSV通道两种)

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

  6. OpenCV学习笔记(九)之直方图均衡化(图像增强)

    图像直方图 1.图像直方图介绍   图像直方图(Image Histogram)是用以表示数字图像中亮度分布的直方图,标绘了图像中每个亮度值的像素数.可以借助观察该直方图了解需要如何调整亮度分布.这种 ...

  7. OpenCV--Python 图像增强(线性变换,直方图正规化,伽马变换,全局直方图均衡化,限制对比度的自适应直方图均衡化)

    图像增强主要解决由于图像的灰度级范围较小造成的对比度较低的问题,目的就是将输出图像的灰度级放大到指定的程度,使得图像中的细节看起来增加清晰.对比度增强有几种常用的方法,如线性变换.分段线性变换.伽马变 ...

  8. 图像算法一:【图像点运算】灰度直方图、伽马变换、灰度阈值变换、分段线性变换、直方图均衡化

    灰度直方图:imhist() %描述了图像灰度统计信息,主要应用于图像分割和图像灰度变换.>>Img=imread( ' xxx.jpg' ); %读图>>I=imhist(I ...

  9. Matlab数字图像处理 02 灰度变化(图像直方图、直方图均衡化、直方图匹配)

    第二章 灰度变化 2.1 图像的亮度.对比度和动态范围 2.1.1 亮度 2.1.2 对比度 2.1.3 动态范围 2.2 线性灰度变换 2.2.1 具有饱和处理的线性灰度变换 2.2.2 分段线性灰 ...

  10. 直方图绘制与直方图均衡化实现

    一,直方图的绘制 1.直方图的概念: 在图像处理中,经常用到直方图,如颜色直方图.灰度直方图等. 图像的灰度直方图就描述了图像中灰度分布情况,能够很直观的展示出图像中各个灰度级所 占的多少. 图像的灰 ...

最新文章

  1. C#图片处理常见方法性能比较
  2. 采用Filter的方法解决Servlet的编码问题
  3. 如何使用Lombok来优雅的编码
  4. java序列化_Java序列化详解
  5. 生活中c语言排序案例,C语言之数字排序-基于冒泡排序法的一些案例(对未知数量的数字进行排序)...
  6. 不限速的远程链接软件ToDesk
  7. 三百英雄服务器维护2020,酸败英雄梦服维护公告《300英雄梦服》将定于2020年8月3...
  8. 推荐实践:结对Review
  9. uniapp苹果底部栏自适应配置
  10. # 研究杂感 × VOSviewer(第六辑)
  11. 浅谈漏洞来源(CVE,NVD,CNVD,CNNVD)
  12. 南京地图全图 南京卫星地图下载 百度高清卫星地图含道路、标签信息叠加
  13. android打鸭子代码,打鸭子安卓版
  14. wap push简介
  15. ArcGis加载天地图山东WMTS服务
  16. apple IDP 个人账户升级到公司账户(转)
  17. 双等位基因(biallelic sites )和多等位基因(multiallelic sites)
  18. 软件开发怎么对抗抄袭_对抗软件开发中的复杂性
  19. 专注创新型蛋白工具研发,上海恺佧生物科技完成3000万元Pre-A轮融资...
  20. RX 6500 XT和rtx3050 哪个好

热门文章

  1. ShareSDK实现一键分享
  2. Julia ---- 基于 DAG图 的并行计算:Dagger
  3. 监督和非监督分类及后处理过程全过程(超详细带解读)
  4. 由D触发器组成的4位移位寄存器
  5. 李兴华java开发实战经典---新IO
  6. 全国大学生数学建模竞赛
  7. 计算机ata考试教案,Atasnackbar教案.doc
  8. 2017淘宝年度 “骗钱”文案合集:让你不停买买买
  9. Cadence Allegro向导创建DIP排针封装图文教程及视频演示
  10. linux命令cd回退_GitHub - gmpy/cdirs: cdirs 用于在linux中快速切换目录,对庞大的项目工程效果显著.其基于标签且无缝取代cd命令,学习成本非常低...