数字图像处理DIP之线性对比度展宽图像增强实践记录
叮嘟!这里是小啊呜的学习课程资料整理。好记性不如烂笔头,今天也是努力进步的一天。一起加油进阶吧!
一、关于图像增强之线性对比度展宽
对比度展宽的目的 : 通过将亮暗差异( 即对比度 ) 扩大 , 来把人所关心的部分强调出来 。
原理:进行像素点对点的、灰度级的线性影射 。 该影射关系通过调整参数来实现对亮暗差异的扩大
。
1、线性对比度展宽实现方法
设原图 、 处理后的结果图的灰度值分别为 [f(i,j)] 和[g(i,j)];
要求 [g(i,j)] 和 [f(i,j)] 均在 [0 , 255] 间变化 , 但是g的表现效果要优于f 。因为 f 和 g 的取值范围相同 , 所以通过 抑制
不重要的部分 , 来 扩展
所关心部分的对比度。
为了达到上面所提出的目的 原图 ( 横轴上的 f(i,j) )与处理后图 ( 纵轴上的 g(i,j) )的灰度影射关系可用下图表示 :
2、算法流程与MATLAB处理程序
• 设置参数
(例如:fa = 5;fb = 30; ga = 80;gb = 100;)
• 读入图像到矩阵F
• 得到F的行列数m,n,
• 初始化输出矩阵G
• 对于G的每一行i
• 对于G的每一列j
• 根据公式由F(i,j)计算G(i,j)
二、实践记录
1、代码实现
ContrastWidening.m
文件
function G=ContrastWidening(ImPath,fa,fb,ga,gb)
x = imread(ImPath); %%% 图片读取
[m,n,c] = size(x);
if(c>1)
F=rgb2gray(x);
end
G=zeros(m,n);
k1 = ga/fa;
k2 = (gb-ga)/(fb-fa);
k3 = (255-gb)/(255-fb);
for i=1:m
for j=1:n
if F(i,j)<fa
G(i,j) = k1*F(i,j);
elseif F(i,j)<fb
G(i,j) = k2*(F(i,j)-fa)+ga;
else
G(i,j) = k3*(F(i,j)-fb)+gb;
end
end
end
G = uint8(G);
figure,imshow(x);
figure,imshow(G);
end
2、运行结果
调用编写好的函数:
ContrastWidening(ImPath,fa,fb,ga,gb);
小啊呜的调用实例:
ContrastWidening('football.jpg',60,100,60,70);
现象如下:左为原图,右为处理后图片;
成功实现!
其中的函数参数fa,fb,ga,gb设置就需要多次实践取值得到更心仪的处理图片啦!
三、线性对比度展宽—— 灰级窗
当 256 个灰度级所表示的亮暗范围内的信息量太大 , 没办法很好地表述时 , 通过开窗的方式 每次只把窗内的灰度级展宽而把窗外的灰度级完全抑制掉
。
例如 : CT 图像的原始数据为 12bit ( 或是 16bit ), 要将其显示出来 , 则只能转换为 8bit , 于是有了 16 归并为1 1 ( 或 256 归并为1 1 ) 的需要 。 这时 , 开骨窗 、 肌肉窗 、 组织窗就可分别清晰地显示相应的内容 。
经过灰级窗处理后,将原图中灰度值分布在范围内的像素值映射到范围内,使对比度展宽获得更清晰图像。灰级窗算法只显示指定灰度级范围内的信息,并充分增强其对比度,从而抑制非重要的信息。
• 灰级窗映射计算公式表示如下:
Ending!
更多课程知识学习记录随后再来吧!
就酱,嘎啦!
注:
1、我们愈是学习,愈觉得自己的贫乏。 —— 雪莱
2、注意:MATLAB自带的图片在“Matlab\R2010b\toolbox\images\imdemos”这个文件夹中。这个文件夹中有很多尺寸合适的图片,也有很多类型,调用时很方便。