手机版

matlab图像处理综合实验

时间:2025-04-22   来源:未知    
字号:

MATLAB高级编程与工程应用

图像处理综合实验

姓名:孙晓宇 班级:无81 学号:2008011044 日期:2010/9/10

第一章

1-2

(a)以测试图像的中心为圆心,图像的长和宽中较小值的一半为半径画一个红颜色的圆 算法概括: 先读出图片的长和宽。从而求得其中点(圆心),然后取较短边的一半为半径r,从头扫描图片,将距离圆心小于等于半径的点的R 置位255,G 和B 置为0 即可。 代码实现:(1-2-1.m)

clear all,close all,clc; load('hall.mat'); b=hall_color; [x,y,z]=size(b);

o=[round(x/2) round(y/2)]; %Ô²ÐÄ r=min(x,y)/2; %°ë¾¶ imshow(b); figure; for i=1:x for j=1:y

if (i-o(1))^2+(j-o(2))^2<=r^2 b(i,j,1:3)=[255 0 0]; end end end

imshow(b);

运行结果:

原图片: 处理后图片:

(b)将测试图像涂成国际象棋状的“黑白格”的样子,其中“黑”即黑色,“白”则意味着保留原图 算法概括: 国际象棋格子为8×8,因此先求得8×8 的格子的长宽,然后循环即可。奇数行的奇数个块涂黑,偶数行的偶数个块涂黑。 代码实现:(1-2-2.m)

clear all,close all,clc; load('hall.mat'); b=hall_color; [x,y,z]=size(b);

imshow(b); figure;

a=[round(x/8) round(y/8)]; for i=1:8

for j=2-mod(i,2):2:8 for k=1:x for l=1:y if

k>=((i-1)*a(1)+1)&k<=i*a(1)&l>=((j-1)*a(2)+1)&l<=j*a(2) b(k,l,1:3)=[0 0 0]; end end end end end imshow(b);

运行结果:

原图片: 处理后图片:

第二章

2-1

图像的预处理是将每个像素灰度值减去128 ,这个步骤是否可以在变换域进行?请在测试图像中截取一块验证你的结论。

可以。可通过取两种域处理结果进行比较来验证。 验证:(2-1.m)

clear all,close all,clc; load('JpegCoeff.mat'); load('hall.mat');

a=double(hall_gray(1:8,1:8)); T=ones(8,8)*128; b=a-T;

c=dct2(a); d=c-dct2(T); e=idct2(d); f=b-e; 运行结果:

f为空域和变换域处理所得结果的差矩阵,该矩阵很小,因此可认为可以在变换域进行。 f =

1.0e-012 *

0.0284 0.0853 0.0568 0.0568 0.0568 0.0711 0.0711 0.0284 0.0426 0.0995 0.0711 0.0711 0.0711 0.0853 0.0853 0.0426 0.0426 0.0995 0.0711 0.0711 0.0711 0.0853 0.0853 0.0426 0.0426 0.0995 0.0711 0.0711 0.0711 0.0853 0.0853 0.0426 0.0426 0.0995 0.0711 0.0853 0.0568 0.0853 0.0853 0.0568 0.1137 0.0853 0.0853 0.0853 0.0853 0.1137 0.0568 0.1137 0.0853 0.0853 0.0853 0.0853 0.1137 0.0426 0.0995 0.0711 0.0711 0.0711 0.0853 0.0853 2-2

请编程实现二维DCT ,并和MATLAB 自带的库函数dct2 比较是否一致。 算法概括:

直接根据原理套用公式。 代码实现:(DCT.m) function C=DCT(P)

%T_2_2 Summary of this function goes here % Detailed explanation goes here [x y]=size(P); D=zeros(x,y); N=x;

for i=1:x for j=1:y

D(i,j)=sqrt(2/N)*cos((i-1)*(2*j-1)*pi/2/N); if i==1

D(i,j)=sqrt(1/N); end end end

C=D*P*D'; return; 运行结果:

在命令窗口中输入: g=DCT(a); g-c

得到两者处理结果的差矩阵,该矩阵很小。 ans =

1.0e-012 *

0.0426 0.0568 0.0568 0.0426

0.6821 0.0639 -0.3517 0.3215 0.0138 0.4259 -0.4339 -0.0593 0.1386 0.0142 0.0178 -0.0182 0.0124 -0.0099 -0.0991 -0.0561 -0.1616 -0.0213 0.0056 -0.0058 -0.0029 -0.0031 -0.0273 0.0114 0.1303 -0.0071 0.0067 0.0163 -0.0187 0.0155 0.0125 0.0051 0.0853 0.0160 -0.0280 0.0056 -0.0013 0.0104 0.0072 -0.0035 0.5873 -0.0115 -0.0009 -0.0122 0.0155 -0.0158 -0.0078 0.0097 -0.3717 0.0073 -0.0035 -0.0031 -0.0286 0.0098 0.0078 0.0008 -0.2114 0.0134 -0.0006 -0.0026 0.0140 -0.0135 0.0079 -0.0070 对比发现库函数考虑的情况更全面,可以处理非方阵。库函数还调用了dct函数。 2-3

如果将DCT 系数矩阵中右侧四列的系数全部置零,逆变换后的图像会发生什么变化?选取一块图验证你的结论。如果左侧的四列置零呢? 代码实现:(2-3.m)

clear all,close all,clc; load('hall.mat'); a=hall_gray; figure; imshow(a); b=dct2(a); c=b;

[x y]=size(a); for j=1:y

if (y-j)<4

b(:,j)=zeros(x,1); end if j<=4

c(:,j)=zeros(x,1); end end

b=idct2(b); c=idct2(c); figure;

imshow(uint8(b)); figure;

imshow(uint8(c));

运行结果:

原图: 右侧四列置零: 左侧四列置零:

结果分析:

右侧置零后,变化很小,只是对比度稍有减小,图像变化减缓。但是由于一般图片的变化都不会很明显,所以左侧数值较小,置零后也不会有太大变化。

左侧置零后,亮度明显变暗,因为左侧,尤其是左上角的直流分量表示图片的亮度,一般取值较大,置零后变化很明显。 2-4

若对DCT 系数分别做转置、旋转90 度和旋转180 度操作(rot90) ,逆变换后恢复的图像有何变化?选取一块图验证你的结论。 代码实现:(2-4.m)

clear all,close all,clc; load('hall.mat'); a=hall_gray; figure; imshow(a); b=dct2(a); c=b; b=b';

c=rot90(c); d=rot90(c); d=idct2(d); b=idct2(b); c=idct2(c); figure;

imshow …… 此处隐藏:8455字,全部文档内容请下载后查看。喜欢就下载吧 ……

matlab图像处理综合实验.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
    ×
    二维码
    × 游客快捷下载通道(下载后可以自由复制和排版)
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
    × 常见问题(客服时间:周一到周五 9:30-18:00)