Matlab 高级编程
与工程应用
实
实验 4 图像处理
164
PART I 基础知识
1. MATLAB 提供了图像处理工具箱,在命令窗口输入 help
images 可查看该工具箱内的所有函数。请阅读并大致了解
这些函数的基本功能。
2. 利用 提供的 函数分别完成以下处理:
以测试图像的中心为圆心,图像的长和宽中较小值的一半为半
径画一个红颜色的圆;
将测试图像涂成国际象棋状的“黑白格”的样子,其中“黑”即黑
色,“白”则意味着保留原图。
用一种看图软件浏览上述两个图,看是否达到了目标。
相关 文件:,
()主要工作是找到圆心,半径,之后用圆的参数形式表示出需要
涂红的“小格子”,这些“小格子”只留下 分量就可以了。
clear all;clc;
load ('hall.mat');
imwrite(hall_color,'hall_color.jpg','JPEG');
info=imfinfo('hall_color.jpg','JPEG');
xx=round(info.Width/2);
yy=round(info.Height/2);
r=min(info.Width,info.Height)/2;
for theta=0:pi/1000:2*pi;
x=floor(xx+r*cos(theta))+1;
y=floor(yy+r*sin(theta))+1;
hall_color(y,x,1)=255;
hall_color(y,x,2)=0;
264
hall_color(y,x,3)=0;
end
imwrite(hall_color,'hall_color_circle.jpg','JPEG');
结果如下:
成功绘出了要求的红色圆圈!
()国际象棋棋盘为 ,把图像长宽分别等分为 份,得到 个
长方形矩阵,对长宽分别 编号,找规律得到只有长宽编号同奇
偶的长方形矩阵需要全部涂黑。这样就很好编写程序了,源程序如
下:
clear all;clc;
load ('hall.mat');
imwrite(hall_color,'hall_color.jpg','JPEG');
info=imfinfo('hall_color.jpg','JPEG');
w=floor(info.Width/8);
h=floor(info.Height/8);
for n=0:7
for m=0:7
if((n/2-floor(n/2)==0)&&(m/2-floor(m/2)==0))||((n/2-floor(n/2)~=0)&&(
m/2-floor(m/2)~=0))
for i=n*w:(n+1)*w-1
for j=m*h:(m+1)*h-1
hall_color(j+1,i+1,1)=0;
hall_color(j+1,i+1,2)=0;
hall_color(j+1,i+1,3)=0;
364
end
end
end
end
end
imwrite(hall_color,'hall_color_chess.jpg','JPEG');
结果如下:
完全符合要求!
PART II 图像压缩编码
1. 图像的预处理是将每个像素灰度值减去 128 ,这个步骤是否可
以在变换域进行?请在测试图像中截取一块验证你的结论。
相关 文件:
由于 为线性变换,可以直接推出:
!"!#;
!" !#" !# $
所以只要在 域减去 %&'(就和每个像素灰度值
减去 等价。
源程序如下:
%task2.1
clear all;clc;
464
load ('hall.mat');
hall_sample=hall_gray(1:8,1:8);
sample1=hall_sample-128;
C1=dct2(sample1);
C=dct2(hall_sample);
C0=dct2(128*ones(8,8));
C2=C-C0;
ans=C1-C2;
结果 '"
可以看到,忽略小的误差,两种方法结果是一致的!
2. 请编程实现二维 DCT ,并和 MATLAB 自带的库函数 dct2 比较
是否一致。
相关 文件:,)
根据课件的叙述, 变换就是矩阵相乘:
564