[Matlab]数字图像处理实验和Matlab的使用

时间:2021-02-18 06:46:55

1、灰度线性变换

变换函数为 :s = a r + b设计程序,实现(a>1,b=0)、(0<a<1, b=0)、(a=1,b>0)和(a=1,b<0)等情况下的灰度变换处理,并比较处理前后的图像效果。

Matlab(matrixlab)矩阵实验室,在我的理解中matlab对灰度图片的提取即将其每个像素点的灰度提取,组成矩阵。

matlab代码:

R=imread('boats.bmp');
[m,n]=size(R)
figure, imshow(R);
title('aerial.bmp');
S1=R*3;
figure;
subplot(121);
imshow(S1);
subplot(122);
plot(R,S1);
N=im2double(R);
S2=N*0.5;
figure;
subplot(121);
imshow(S2);
subplot(122);
plot(N,S2);
S3=R+10;
figure;
subplot(121);
imshow(S3);
subplot(122);
plot(R,S3);

由于是线性变换,对于矩阵而言就是可以直接进行线性变换。

这里显示一个运行后的范例。

[Matlab]数字图像处理实验和Matlab的使用

2灰度非线性变换

设计程序,实现图像的指数变换和对数变换。

这里是非线性的变换,对于上面的整体进行变换的方式我认为并不可取,例如矩阵的指数变换,涉及矩阵相乘,而线性代数中说明了矩阵相乘的要求,左矩阵的行数等于右矩阵的列数,而图片的像素问题不能保证,因此要对每个像素点进行操作。

指数部分代码:

f=imread('boats.bmp');
[M,N]=size(f);
g=zeros(M,N);
f=double(f);
g=double(g);
for i=1:M
for j=1:N
g(i,j)=f(i,j)^10;
end
end
figure;
subplot(121);
imshow(uint8(g));
subplot(122);
plot(f,g);

对数部分只要修改其中关键行即可。

3.邻域平均

设计程序,实现3×3邻域平均和7×7邻域平均的平滑处理。观察处理前后图像效果,分析实验结果。

对图片的每个固定区域的像素取值都取其区域的平均值。

例7*7均值

代码:

f=imread('boats.bmp');
[M,N]=size(f);
g=zeros(M,N);
yu=0;
yu=double(yu);
f=double(f);
g=double(g);
for i=1:M-7
for j=1:N-7
for x=i:i+6
for y=j:j+6
yu=yu+f(x,y);
end;
end;
for x=i:i+6
for y=j:j+6
g(x,y)=yu/49;
end;
end;
yu=0;
j=j+6;
end;
i=i+6;
end;
figure;
subplot(121);
imshow(uint8(g));
subplot(122);
plot(f,g);
也是对每个像素点的操作。