matlab数字图像处理之局部直方图均衡化
在对图像的直方图进行处理时,有时需要对图像小区域细节的局部增强,解决的办法就是在图像的每一个像素点的领域中,按照灰度级分布设置变换函数(可以是邻域直方图均衡化,也可以是邻域直方图匹配),来进行局部增强。
步骤:
(1)定义一个方形区域(邻域),大小为n*n,其中n为奇正整数;
(2)计算该邻域的直方图,设计变换函数(这里采用直方图均衡化变换);
(3)使用变换函数映射该区域中心像素的灰度;
(4)把该区域中心移动,重复(1)(2)(3)。
matlab代码函数定义如下:
function img_out=part_hist_equal(img,Size)
%局部直方图均衡化函数,参数img为输入图像,Size为邻域大小(奇正整数)[m,n,k]=size(img);if k==1 %如果为灰度图img_out=img;img_fill=[zeros((Size-1)/2,n+(Size-1));zeros(m,(Size-1)/2),img,zeros(m,(Size-1)/2);zeros((Size-1)/2,n+(Size-1))];%0填充img=uint16(img);%unit8类型转为uint16类型,避免uint8的最大数255加1时出现溢出错误for i=1:mfor j=1:ns=field_histeq(img_fill,i,j,Size);%调用下面的field_histeq函数img_out(i,j)=s(img(i,j)+1);endendendif k==3 %如果为RGB图img_R=img(:,:,1);img_out_R=img_R;img_R=uint16(img_R);%unit8类型转为uint16类型,避免uint8的最大数255加1时出现溢出错误img_G=img(:,:,2);img_out_G=img_G;img_G=uint16(img_G);%unit8类型转为uint16类型,避免uint8的最大数255加1时出现溢出错误img_B=img(:,:,3);img_out_B=img_B;img_B=uint16(img_B);%unit8类型转为uint16类型,避免uint8的最大数255加1时出现溢出错误img_fill_R=[zeros((Size-1)/2,n+(Size-1));zeros(m,(Size-1)/2),img_R,zeros(m,(Size-1)/2);zeros((Size-1)/2,n+(Size-1))];%0填充img_fill_G=[zeros((Size-1)/2,n+(Size-1));zeros(m,(Size-1)/2),img_G,zeros(m,(Size-1)/2);zeros((Size-1)/2,n+(Size-1))];%0填充img_fill_B=[zeros((Size-1)/2,n+(Size-1));zeros(m,(Size-1)/2),img_B,zeros(m,(Size-1)/2);zeros((Size-1)/2,n+(Size-1))];%0填充for i=1:mfor j=1:ns_R=field_histeq(img_fill_R,i,j,Size);%调用下面的field_histeq函数s_G=field_histeq(img_fill_G,i,j,Size);s_B=field_histeq(img_fill_B,i,j,Size);img_out_R(i,j)=s_R(img_R(i,j)+1);img_out_G(i,j)=s_G(img_G(i,j)+1);img_out_B(i,j)=s_B(img_B(i,j)+1);endendimg_out=cat(3,img_out_R,img_out_G,img_out_B);%矩阵拼接函数(这里是拼接为三维RGB)endendfunction s=field_histeq(img,x,y,Size)
%定义邻域直方图均衡化函数,参数img为输入图像,x,y为邻域中心在未0填充的img中的坐标,Size为邻域大小(奇正整数)field_img=img(x:x+Size-1,y:y+Size-1);h=imhist(field_img)/numel(field_img);%直方图数据归一化s=0:length(h)-1;%创建输出灰度值向量rk=0.0;%输入图像灰度概率求和的变量for i=1:length(h)rk=rk+h(i);s(i)=round(rk*(length(h)-1));%四舍五入end
end
主函数运行代码:
img=imread('dog.jpg');
img=rgb2gray(img);%rgb图像转为灰度图
img_out=part_hist_equal(img,5);%调用局部直方图均衡化函数(自写实现)
img_eq=histeq(img,256);%全局直方图均衡化figure
subplot(221)
imshow(img)
title('原始图像')
subplot(222)
imshow(img_out)
title('局部直方图均衡化图像')
subplot(223)
imshow(img_eq)
title('全局直方图均衡化图像')
运行结果如下:
感谢阅读!
matlab数字图像处理之局部直方图均衡化相关推荐
- matlab数字图像处理编码实现直方图均衡化
matlab中直方图均衡化有对应的内置函数histeq函数,其具体形式为: g=histeq(f,nlev) 参数f为输入图像,nlev是为输出图像设置的灰度级(默认为64),g为直方图均衡化后的输出 ...
- 【数字图像处理】图像直方图均衡化、空域滤波(均值滤波、中值滤波)、图像锐化(Laplace算子)、图像傅里叶变换实验
图像直方图均衡化.空域滤波.图像锐化.图像傅里叶变换 一.图像直方图均衡化 二.图像空域滤波 1.均值滤波(滤波次数n→3) 2.中值滤波(滤波次数n→3) 3.图像锐化(Laplace算子) 三.图 ...
- 数字图像处理:局部直方图处理(Local Histogram Processing)
☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░ 一.引言 在前面章节<<数字图像处理>直方图均衡学习总结+感悟> ...
- 数字图像处理:使用直方图统计进行图像增强
一.引言 在<数字图像处理:局部直方图处理(Local Histogram Processing) https://blog.csdn.net/LaoYuanPython/article/det ...
- [Python图像处理] 三十八.OpenCV图像增强和图像去雾万字详解(直方图均衡化、局部直方图均衡化、自动色彩均衡化)
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- MATLAB 数字图像处理GUI二值图像实验
电信19-2 翁大弟 摘要 图像信息是人类获取信息的重要来源及利用信息的重要手段,数字图像处理的产生和迅速发展主要受三个因素的影响:一是计算机的发展:二是广泛的农牧业.环境.军事.工业等方面的应用需求 ...
- MATLAB数字图像处理复习概览
MATLAB数字图像处理 第1章 绪论 数字图像的概念 数字图像处理 第2章 数字图像处理基础 数字图像的生成与表示 数字图像的数值描述 第3章 图像基本运算 图像几何变换 几何变换基础 位置变换 几 ...
- MATLAB说明图像增强,MATLAB数字图像处理(二)图像增强
1 图像增强 1.1 直方图均衡化 对于灰度图像,可以使用直方图均衡化的方法使得原图像的灰度直方图修正为均匀的直方图. 代码如下: 1 2 3I2=histeq( ...
- matlab空域滤波,MATLAB数字图像处理基本操作及空域滤波
MATLAB数字图像处理基本操作及空域滤波 实验一 MATLAB 数字图像处理基本操作及空域滤波实验目的1.了解有关数字图像处理的基本概念,熟悉Matlab软件中关于数字图像处理的基本命令,掌握利用M ...
最新文章
- Struts2--标签tag
- npm install -g -S -D的区别及应用场景
- mysql 表结构反转_一道经典的MySQL面试题,答案出现三次反转
- ERP仓库管理系统查询(十)
- 菜鸟教程java在线编辑器_HTML 编辑器
- 当贝显示服务器生病,【当贝市场】电视盒子卡顿的三大原因
- PHP icbc工商银行开放平台聚合支付,二维码扫码支付对接步骤
- 云计算实验(二)Hadoop 练习
- 快手自研直播多码率标准对行业发布
- 百度地图海量点尺寸和大小
- 精品韩国美食西餐厅介绍PPT模板
- IOS开发之——动画-图标抖动(97)
- java马士兵笔记_马士兵java教程笔记2
- Ubuntu 14.04 下安装Skype
- 51单片机的计时器和计数器
- Android Studio开发APP
- html+css+js 制作 PC 端酷狗音乐网页
- matlab-bgl 工具包配置环境 TDM-GCC-64 mex
- bs模型 cs模型
- 【JavaScript】慢慢进入javascript的大门~~~