【实践】数字图像处理DIP课程课业打卡实验1 图像增强算法
叮嘟!这里是小啊呜的学习课程资料整理。好记性不如烂笔头,今天也是努力进步的一天。一起加油进阶吧!
一、实验目的
1、了解在空域图像增强中常用的典型算法:线性对比度展宽、直方图均衡化。使学生通过对图像采用线性对比度展宽、直方图均衡化的方法进行处理,获得图像画质的改善。
2、掌握线性对比度展宽方法的工作原理和算法实现。
3、掌握直方图均衡化方法的工作原理和算法实现。
二、实验内容
1、实现线性对比度展宽算法
测试代码:
fa = 5;fb = 30;
ga = 80;gb = 100;
ImPath='.\im\pict1.png';
J=ContrastWidening(ImPath,fa,fb,ga,gb);
figure,imshow(ImPath);
figure,imshow(J);
处理流程如下:
读入图像到矩阵F
得到F的行列数与颜色通道数:m,n,c
如果颜色通道数c>1,则将彩色图像转化为灰度图rgb2gray
初始化输出矩阵G
对于G的每一行i
对于G的每一列j
根据公式(教材P36),由F(i,j)计算G(i,j)
(备注:将执行正确的代码粘贴在此处,核心代码要求有注释)
function G=ContrastWidening(ImPath,fa,fb,ga,gb)
x = imread(ImPath); %读入图像
[m,n,c] = size(x); %得到F的行列数与颜色通道数:m,n,c
if(c>1) %如果颜色通道数c>1
F=rgb2gray(x); %则将彩色图像转化为灰度图rgb2gray
end
G=zeros(m,n);
F=double(F);
k1 = ga/fa;
k2 = (gb-ga)/(fb-fa);
k3 = (255-gb)/(255-fb);
for i=1:m %对于G的每一行i
for j=1:n %对于G的每一列j
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);
end
2、实现灰度图像的直方图均衡化算法
测试代码:
F = imread('.\im\pict1.png');
[G]=imhisteq(F);
figure,imshow(G);
处理流程如下:
(1)读入一幅灰度图像,存放在图像矩阵F中。(imread函数)。
(2)获得输入图像尺寸M、N、C(size函数)。并将图像矩阵F中的数据由uint8类型转换为double类型以便后续处理。如果颜色通道数C>1,则将彩色图像转化为灰度图rgb2gray
(3)计算图像F的灰度直方图h(imhist函数;或者通过两重循环遍历每个像素点从而得到每个灰度值的累计像素点个数)。
(4)计算计算原图的灰度分布概率hs。hs=h/(M*N) (i=0,1,…,255)。
(4)计算原图灰度的累计分布hp0(使用cumsum函数)。
(5)hp1=hp0*255。
(6)将hp1四舍五入,令hp1(1)=0。
(7)根据步骤(6)得到的新旧图像灰度值的映射结果,设置两重循环遍历图像F中所有像素点,求出每一个像素点的灰度值F(i,j),计算F(i,j)对应数组hp1中的位置x,得到hp1(x)并赋给新图像的对应像素值G(i,j)
(8)将计算得到的新图像矩阵中所有点的灰度值由double转换为uint8。输出最终得到的结果图像。
(备注:将执行正确的代码粘贴在此处,核心代码要求有注释)
扫描二维码关注公众号,回复:
11543287 查看本文章
function [G]=imhisteq(F)
[height,width,d]=size(F);
if(d>1)
F=rgb2gray(F);
end
nbins=256;
hist_0 = imhist(F,nbins)';%计算图像F的灰度直方图
hist_1 = hist_0/(height*width);%计算计算原图的灰度分布概率
hp_0 = cumsum(hist_1);%计算原图灰度的累计分布
hp_1 = round(hp_0*255);%hp1=hp0*255
hp_1(1)=0;%将hp1四舍五入,令hp1(1)=0
F0=double(F);
for i = 1:height %两重循环遍历图像F中所有像素点
for j = 1:width
GrayScale=F0(i,j); %求出每一个像素点的灰度值F(i,j),计算F(i,j)对应数组hp1中的位置x,得到hp1(x)并赋给新图像的对应像素值G(i,j)
NewGrayScale = hp_1(GrayScale+1);
G(i,j) = NewGrayScale;
end
end
G = uint8(G);
end
3、实现彩色图像的直方图均衡化算法
(算法流程可以参考灰度图像的直方图均衡化算法)。
参考处理图像: f11.jpg、f13.jpg
测试代码:
F=imread('.\im\f11.jpg');
[G] = imhisteq_C(F);
figure,imshow(F);figure,imshow(G);
(备注:将执行正确的代码粘贴在此处,核心代码要求有注释)
function [J]=imhisteq_C(Im)
[height,width,d]=size(Im);
for index_d=1:d %针对彩色图片各个通道
I=Im(:,:,index_d);
nbins=256;
hist_0=imhist(I,nbins)';
hist_1=hist_0/(height*width);
hp_0=cumsum(hist_1);
hp_1=hp_0*255;
hp_1(1)=0;
I0=double(I);
for i=1:height
for j=1:width
GrayScale=I0(i,j);
NewGrayScale=hp_1(GrayScale+1);
J(i,j,index_d)=NewGrayScale;%注意此处index_d不要忘记遗漏;
end
end
J=uint8(J);
end
Ending!
更多课程知识学习记录随后再来吧!
就酱,嘎啦!
注:
人生在勤,不索何获。