【MATLAB图像处理学习】3.直方图处理与函数绘图
2020-04-02 07:25
2221 查看
使用冈萨雷斯版本教材学习
3.3.1生成并绘制图像直方图
h(rk)=nk h(r_k)=n_k h(rk)=nk
灰度级为rkr_krk的像素数量是nkn_knk
归一化直方图:
p(rk)=h(rk)n=nkn
p(r_k)=\frac{h(r_k)}{n}=\frac{n_k}{n}
p(rk)=nh(rk)=nnk
h = imhist(f,b)生成图像的直方图。
f为图像,
b为灰度级数,默认为256。
h = imhist(f,b)/numel(b)生成归一化直方图。
numel返回图像的像素数。
直方图也可以用条形图
bar绘制使用,
bar(horz,v,width),
f = imread('washed_out_pollen_image.tif'); subplot(1,2,1) imhist(f,255/5) hold on h = imhist(f,255/5); horz = linspace(0,255,51); subplot(1,2,2) bar(horz,h) axis([0 255 0 60000]) set(gca,'xtick',0:50:255) set(gca,'ytick',0:20000:60000)
3.3.2 直方图均衡
直方图均衡通过把输入图像的灰度级扩展到较宽灰度范围来实现图像增强。
sk=T(rk)=∑j=0kpr(rj)=∑j=0knjn
s_k=T(r_k)=\sum_{j=0}^{k}{p_r(r_j)}=\sum_{j=0}^{k}{\frac{n_j}{n}}
sk=T(rk)=j=0∑kpr(rj)=j=0∑knnj
pr(r)p_r(r)pr(r)代表一幅给定图像中灰度级的概率密度函数(PDF),njn_jnj代表灰度级为rjr_jrj的像素个数,这个式子其实是概率分布函数(归一化后直方图)的离散形式。njn\frac{n_j}{n}nnj代表rjr_jrj灰度值像素的占比,即密度,求和Σ\SigmaΣ将密度’积分’转化为概率。概率的范围是0—1,所以直方图均衡化其实就是将**概率分布函数(归一化后直方图)**等比扩展。
直方图均衡由工具箱中的函数
histeq实现,语法为
g=histeq(f,nlev)。其中,
f为输入图像,
nlev是为输出图像设定的灰度级数。
f = imread('washed_out_pollen_image.tif'); subplot(2,2,1); imshow(f); title('输入图像') subplot(2,2,2); imhist(f); title('输入图像的直方图') ylim('auto') g = histeq(f,256); subplot(2,2,3); imshow(g); title('直方图均衡后的图像') subplot(2,2,4); imhist(g); title('均衡后的直方图')
3.3.3 直方图匹配(规定化)
直方图匹配:生成具有特定直方图的图像的方法
在这个例子中,图像受大片较暗区域控制,造成直方图大部分像素都集中在灰度级的暗端,经过直方图均衡后,产生了“褪色现象”。
期望的直方图在灰度级低端有较小的集中范围,并能够保留原始图像直方图的大体形状
函数
adapthisteq:对比度受限的自适应直方图均衡。这种方法用直方图匹配方法逐个处理图像中的较小区域,然后使用双线性内插法将相邻的小片组合起来,从而消除人工引入的边界。
参数值 | 值 |
---|---|
‘NumTiles’ | 一个由正整数组成的两元素向量[r c],由向量的行和列指定小片数。r和c都必须至少是2,小片总数等于r*c。默认值是[8 8] |
‘ClipLimit’ | 范围[0 1]内的标量,用于指定对比度增强的限制。较高的值产生较强的对比度。默认值是0.01 |
‘NBins’ | 针对建立对比度增强变换所用的直方图容器数目指定的正整数标量。较高的值会在较慢的处理速度下导致较大的动态范围。默认值是256 |
‘Range’ | 规定输出图像数据范围的字符串。‘original’—范围被限制到原始图像的范围,[min(f( : )) max(f( : ))]。‘full’—使用输出图像类的整个范围。例如,对于uint8类的数据,范围是[0 255],这是默认值 |
‘Distribution’ | 为图像小片指定期望直方图形状的字符串。‘uniform’—平坦的直方图(默认);‘rayleigh’—钟形直方图;‘exponential’—曲线直方图 |
‘Alpha’ | 适用于瑞利和指数分布的非负标量。 |
f = imread('blurry_moon.tif'); subplot(2,4,1); imshow(f); title('输入图像') subplot(2,4,5); imhist(f); title('输入图像的直方图') g1 = adapthisteq(f); subplot(2,4,2); imshow(g1); title('使用带默认值函数') subplot(2,4,6); imhist(g1); title('使用带默认值函数') g2 = adapthisteq(f,'NumTiles',[25 25]); subplot(2,4,3); imshow(g2); title('NumTiles=[25 25]') subplot(2,4,7); imhist(g2); title('NumTiles=[25 25]') g3 = adapthisteq(f,'NumTiles',[25 25],'ClipLimit',0.05); subplot(2,4,4); imshow(g3); title('NumTiles=[25 25],ClipLimit=0.05') subplot(2,4,8); imhist(g3); title('NumTiles=[25 25],ClipLimit=0.05')
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 图像处理学习笔记之MATLAB中imhist、imadjust、stretchlim函数实现
- Matlab学习(一):数字图像处理大作业用到的函数
- matlab图像处理函数学习——图像或者矩阵填充函数:padarray
- 2014年2月27日 Matlab 相关图像处理函数学习
- 【Matlab图像处理】学习笔记:cat函数合成RGB 图像
- MATLAB GUI ,2,使用MATLAB的函数来实现MATLAB GUI,part 5,imshow绘图方式以及主辅图像缓存
- matlab图像处理函数
- Matlab 图像处理相关函数命令大全
- 关于matlab中图像处理最基本的函数的个人总结
- [matlab 图像处理] 阈值分割(直方图自己算)
- 基于MATLAB的数字图像处理之直方图处理
- 数字图像处理编程基础:Python语言不调用OpenCV函数实现直方图统计和直方图均衡
- 【转】matlab图像处理学习笔记-数学形态与二值图像操
- MATLAB图像处理相关函数 非常有用
- Matlab图像处理常用函数归类总结
- matlab 数字图像处理 图像增强 空域 直方图修正
- 使用思维导图学习Matlab图像处理(2)——Matlab基础
- matlab图像处理函数汇总
- 计算机视觉与图像处理学习笔记(三)opencv的基本数据类型与简单图像处理函数
- 图像处理-Matlab平台批量更改文件名——利用系统rename函数