MatLab学习作业之数字图像处理上(台大郭彦甫)

Practice
一:Adjust the “brightness” and “contrast” of rice.png and display it on the screen(改变米图的亮度与对比度并展示)
%亮度的改变通过增加灰度图的值
%对比度的增加可以共同乘一个大于1的数值
%使用两个for循环,可以提前建立两个zeros矩阵可减少运算时间
I=imread(‘rice.png’);
subplot(1,3,1);imshow(I)%显示原图
for i=size(I,1)
for j=size(I,2)
I1(i,j)=I(i,j)+50;%增加亮度
I2(i,j)=I(i,j).*1.3;%增加对比度
end
end
subplot(1,3,2);imshow(I1)%绘制增加亮度后的图
subplot(1,3,3);imshow(I2)%绘制增加对比度后的图
二:Plot the histograms of the images before and after the “brightness” and “contrast” adjustment for rice.png(绘制原图直方图与增加对比度与亮度后的直方图)
%直接使用MATLAB内置的function:imhist()即可
imhist(I);
imhist(I1);
imhist(I2);
三:Write your own equalization function, try it on pout.tif, and display it on the screen(书写自己的直方图均衡化算法,将图片均衡化后显示)
%直方图均衡化的核心即为将pixels的分布扩展既符合它本身的分布函数又扩展到整个histogram上
%因此首先求出其 密度函数与分布函数,然后将分布函数乘256,这样就为扩展后的灰度值分布,再找到每个灰度值代表数为多少,一一对应过来(此处使用https://blog.csdn.net/yutong5818/article/details/80304012中的方法,因为本人写不出来,也是学习的)
%灰度直方图均衡化用分布函数代替概率密度函数,实现熵最大化(为什么是熵最大化不是很懂)
I=imread(‘pout.tif’);
[m,n]=size(I);
I1=im2uint8(ones(m,n));(化为整数)
h=imhist(I);%h为I的直方图
f=length(h);%将直方图的长度赋予f

%概率密度
fx=f/numel(h);

%分布函数
FX=cumsum(fx);

获得均衡化之后的灰度直方图
j=FX.*256;
J=round(j);%由于灰度级为1-256之间的整数,
故需对拓展之后的灰度灰度级数取整才有意义。

将拓展后的的灰度级数对应映射到图片中。

由于灰度级数为1-256之间的整数,故需对扩展之后的灰度级数取整才有意义,
得到的J矩阵为1X256大小,表示扩展之前的灰度级数,其中每个级数对应元素的值为该灰度级数扩展后的灰度级数值。如J(2)=24,表示原始灰度图灰度值
的地方经灰度扩展后其灰度值为24
for i=1:256
old=find(Ji); %找出扩展后的级数对应的扩展前的级数
L=length(old);
for k=1:L %m每一个n*n的
oldlocation=find(f
(old(k)-1));%找到拓展前的灰度级数对应的像素点
I1(oldlocation)=i;
end
end
subplot(1,2,1),imhist(I1)
subplot(1,2,2),imshow(I1);

你可能感兴趣的:(Matlab学习作业)