当前位置:首页 >> 其它课程 >>

上机作业


数字图像处理上机实验报告 姓 名: 徐利苹 学 号: 104090357 学 院: 物理与电子信息学院 班 级: 10应电B班 实验课题: 五类图像处理的运算方法 任课教师: 石俊生 (教授 ) 填表日期: 2012 年12 月20 日

实验题目(一) :练习图像处理程序编写 1.Matlab 数字图像处理程序,熟悉 Matlab 数字图像 图像的读入程序:

clc,clear all,close all; I=imread('pout.tif'); imshow(I);

图像的显示: clc,clear all,close all

i=imread('pout.tif'); imview(i);

3. 编程一个显示一幅图像直方图程序; clc,clear all,close all; I=imread('pout.tif'); figure; subplot(1,2,1),imshow(I); subplot(1,2,2),imhist(I,64);

直方图均衡图像增强: clc,clear all,close all; I=imread('pout.tif'); J=histeq(I); figure; subplot(1,2,1),imshow(I); subplot(1,2,2),imshow(J); figure; subplot(1,2,1),imhist(I,64); subplot(1,2,2),imhist(J,64);

上机实验(二) :图像傅里叶变换研究 1.学习图像变换域处理图像; f = zeros(30,30); f(5:24,13:17) = 1;%生成一矩形函数 F0 = fft2(f);%二维傅立叶变换 F2 = log(abs(F0)); F = fft2(f,256,256);%补零操作的二维傅立叶变换 F1 = fftshift(F);%将零频率移到中心位置 figure; subplot(221); imshow(f,'InitialMagnification','fit');% 以合适窗口大小显示f subplot(222); imshow(F2,[-1 5],'InitialMagnification','fit'); %确定像素值 的显示范围

subplot(223); imshow(log(abs(F)),[-1 5]); %对数显示补零变换后的图像 subplot(224); imshow(log(abs(F1)),[-1 5]); %对数显示频移后的图像

h = fspecial('gaussian');%冲激响应 freqz2(h)%计算频率响应

A = magic(3); B = ones(3); A(8,8) = 0; B(8,8) = 0; A1=fft2(A); B1=fft2(B); C = ifft2(A1.*B1); C = C(1:5,1:5); C = real(C) C= Columns 1 through 4 8.0000 9.0000 15.0000 7.0000 19.0000

11.0000

17.0000

30.0000

15.0000 7.0000 4.0000 Column 5 6.0000 13.0000 15.0000 9.0000 2.0000 C=

30.0000 21.0000 13.0000

45.0000 30.0000 15.0000

30.0000 23.0000 11.0000

Columns 1 through 4 8.0000 9.0000 15.0000 7.0000 19.0000 30.0000 23.0000 11.0000

11.0000 15.0000 7.0000 4.0000 Column 5 6.0000 13.0000 15.0000 9.0000 2.0000 C=

17.0000 30.0000 21.0000 13.0000

30.0000 45.0000 30.0000 15.0000

Columns 1 through 4 8.0000 11.0000 15.0000 7.0000 4.0000 Column 5 9.0000 17.0000 30.0000 21.0000 13.0000 15.0000 30.0000 45.0000 30.0000 15.0000 7.0000 19.0000 30.0000 23.0000 11.0000

6.0000 13.0000 15.0000 9.0000 2.0000 C= Columns 1 through 4 8.0000 11.0000 15.0000 7.0000 4.0000 Column 5 6.0000 13.0000 15.0000 9.0000 2.0000 bw = imread('text.png'); a = bw(32:45,88:98); imshow(bw); figure, imshow(a); C = real(ifft2(fft2(bw) .* fft2(rot90(a,2),256,256))); figure, imshow(C,[]) c=max(C(:)) thresh = 0.9*c; figure, imshow(C > thresh) 9.0000 17.0000 30.0000 21.0000 13.0000 15.0000 30.0000 45.0000 30.0000 15.0000 7.0000 19.0000 30.0000 23.0000 11.0000

离散余弦变换: RGB = imread('autumn.tif');%读取图像 I = rgb2gray(RGB);%转化为灰度图像 J = dct2(I);%离散余弦变换 figure,imshow(log(abs(J)),[]),%显示离散余弦变换的系数 colormap(jet(64)), colorbar J(abs(J) < 10) = 0;%置小系数为0 K = idct2(J);%离散余弦逆变换 figure, subplot(121),imshow(I); subplot(122), imshow(K,[0 255])

I = imread('cameraman.tif');%读取图像 I = im2double(I);%转化为double型的 T = dctmtx(8);% 变换矩阵

dct = @(x)T * x * T';%DCT变换公式 B = blkproc(I,[8 8],dct);%分块进行DCT变换 mask = [1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];%DCT变换的小系数 0

B2 = blkproc(B,[8 8],@(x)mask.* x);%分块选择DCT变换的系数 invdct = @(x)T' * x * T;%DCT逆变换公式 I2 = blkproc(B2,[8 8],invdct);%分块重构 figure, subplot(121),imshow(I), subplot(122), imshow(I2)

I = zeros(100,100); I(25:75, 25:75) = 1;%矩形图像 imshow(I) [R,xp] = radon(I,[0 45]);%求取0度和45度方向的Radon变换 figure; subplot(121),plot(xp,R(:,1)); %显示0度方向的Radon变换 title('R_{0^o} (x\prime)') subplot(122),plot(xp,R(:,2)); %显示45度方向的Radon变换 title('R_{45^o} (x\prime)')

I = zeros(100,100); I(25:75, 25:75) = 1;%矩形图像 theta = 0:180; [R,xp] = radon(I,theta);%求取0度到180度的Radon变换 imagesc(theta,xp,R);%显示Radon变换的结果

title('R_{\theta} (X\prime)'); xlabel('\theta (degrees)'); ylabel('X\prime'); set(gca,'XTick',0:20:180); colormap(hot); colorbar

I = fitsread('solarspectra.fts');%读取fts格式图像 I = mat2gray(I);%转化为灰度图像 BW = edge(I);%转化为二值图像 subplot(121),imshow(I), theta = 0:179; subplot(122),imshow(BW)

[R,xp] = radon(BW,theta);%求取0度到179度直接的Radon变换 figure, imagesc(theta, xp, R); colormap(gray); xlabel('\theta (degrees)'); ylabel('x\prime'); title('R_{\theta} (x\prime)'); colorbar P = phantom(256);%生成头骨图像 theta1 = 0:10:170; %计算三组theta值下的Radon [R1,xp] = radon(P,theta1); theta2 = 0:5:175; [R2,xp] = radon(P,theta2); theta3 = 0:2:178; [R3,xp] = radon(P,theta3); figure, imagesc(theta3,xp,R3); %显示第三组theta值下的Radon 变 换 colormap(hot); colorbar 变换

xlabel('\theta');

ylabel('x\prime');

I1 = iradon(R1,10);%根据投影数据进行图像重建 I2 = iradon(R2,5); I3 = iradon(R3,2); figure, subplot(221), imshow(P); subplot(222), imshow(I1); subplot(223), imshow(I2); subplot(224), imshow(I3);

2. 练习傅里叶变换及其滤波处理:分别用低通、高通、带通处理,比较处理 效果。 低通: clc,clear all,close all; I=imread('autumn.tif'); subplot(1,2,1); imshow(I); title('原图像'); s=fftshift(fft2(I)); [a,b]=size(s); a0=round(a/2); b0=round(b/2); d=10; for i=1:a for j=1:b distance=sqrt((i-a0)^2+(j-b0)^2); if distance<=d; h=1; else h=0; end; s(i,j)=h*s(i,j); end;

end; s=uint8(real(ifft2(ifftshift(s)))); subplot(1,2,2); imshow(s); title('低通滤波图像');

高通:

clc,clear all,close all; I=imread('tire.tif'); subplot(1,2,1); imshow(I); title('原图像'); s=fftshift(fft2(I)); [a,b]=size(s); a0=round(a/2); b0=round(b/2); d=10; p=0.2; q=0.5; for i=1:a; for j=1:b; distance=sqrt((i-a0)^2+(j-b0)^2); if distance<=d; h=1; else h=0; end; s(i,j)=(p+q*h)*s(i,j); end; end; s=uint8(real(ifft2(ifftshift(s)))); subplot(1,2,2); imshow(s); title('高通滤波图形'); 带通: clc,clear all,close all; I=imread('tire.tif'); subplot(1,2,1); imshow(I);

title('原信号'); b=remez(10,[0 0.05 0.15 0.55 0.65 1],[0 0 1 1 0 0]); h=ftrans2(b); J=freqz2(h); K=J(I); subplot(1,2,2); imshow(K); title('带通滤波图形'); 3.练习在频域低通去噪,并与空域3?3、7?7平均模板处理效果比较。 频域低通去噪: clc,clear all,close all; I=imread('lena_noise.bmp'); figure(1) imshow(I);%显示原图像 title('原图像') f=double(I); g=fft2(f); g=fftshift(g); [M,N]=size(g); nn=2; % 二阶巴特沃斯(Butterworth)低通滤波器 %数据类型转换, MATLAB不支持图像的无符号整型的计算 % 傅立叶变换 % 转换数据矩阵

d0=50; m=fix(M/2); n=fix(N/2); for i=1:M for j=1:N d=sqrt((i-m)^2+(j-n)^2); h1=1/(1+0.414*(d/d0)^(2*nn)); %计算低通滤波器传递函数 result1(i,j)=h1*g(i,j); end end result1=ifftshift(result1); J2=ifft2(result1); J3=uint8(real(J2)); figure(3) imshow(J3);

title('???¨???¨??');

% 显示滤波处理后的图像

IMWRITE(Q,'medfilt3by3.jpg','jpg'); IMWRITE(W,'medfilt5by5.jpg','jpg'); IMWRITE(y1,'average3by3.jpg','jpg'); IMWRITE(y2,'average5by5.jpg','jpg'); IMWRITE(J3,'Butterworth_low.jpg','jpg');

空域 3?3、7?7 平均模板处理效果比较:

3?3 平均模板处理效果:

7?7 平均模板处理效果:

clc,clear all,close all; I=imread('lena_noise.bmp'); subplot(2,2,1);imshow(I); title('原图像'); K1=filter2(fspecial('average',3),I)/255; K2=filter2(fspecial('average',7),I)/255; subplot(2,2,2);imshow(K1); title('改进后图像1'); subplot(2,2,3); imshow(K2); title('改进后图像2'); 上机作业(三) :图像增强实验 1.对灰度图像进行直方图“均衡化”和“规定化”处理,简单分析处理效果。

原图像直方图:

均衡化图像直方图:

I = imread('tire.tif');%读取图像 J = histeq(I);%直方图均衡化 figure;%显示原图像和均衡化后的图像 subplot(1,2,1); imshow(I); title('原图像'); subplot(1,2,2); imshow(J); title('均衡化后图像'); figure;%显示原图像和均衡化后图像的直方图 subplot(1,2,1); imhist(I,64); title('原图像直方图'); subplot(1,2,2); imhist(J,64); title('均衡化后图像直方图'); 2.在“空域”和“频率”对图像进行去噪、锐化、边缘检测处理。 空域中值去噪:

clc,clear all,close all; I=imread('lena_noise.bmp'); K1=medfilt2(I,[7 7]); subplot(1,2,1);imshow(I);title('原图像'); subplot(1,2,2);imshow(K1);title('7*7模版中值滤波'); 边缘检测:

clc,clear all,close all; I=imread('lena.bmp'); %使用sobel算子进行边缘检测 J=imread('cameraman.tif'); K=imread('cell.tif'); L=imread('rice.png'); M=imread('tire.tif'); I1=edge(I,'sobel'); J1=edge(J,'sobel'); K1=edge(K,'sobel'); L1=edge(L,'sobel');

M1=edge(M,'sobel'); figure(1) subplot(1,2,1);imshow(I);title('原图像'); subplot(1,2,2);imshow(I1);title('边缘检测图像'); figure(2) subplot(1,2,1);imshow(J);title('原图像'); subplot(1,2,2);imshow(J1);title('边缘检测图像'); figure(3) subplot(1,2,1);imshow(K);title('原图像'); subplot(1,2,2);imshow(K1);title('边缘检测图像'); figure(4) subplot(1,2,1);imshow(L);title('原图像'); subplot(1,2,2);imshow(L1);title('边缘检测图像'); figure(5) subplot(1,2,1);imshow(M);title('原图像'); subplot(1,2,2);imshow(M1);title('边缘检测图像');

逆滤波和维纳滤波对运动模糊复原

clc,clear all,close all;%读取原图像 I=imread('move.bmp'); subplot(2,2,1);imshow(I);title('原图像'); I=rgb2gray(I);%将原图像转换为灰度图 subplot(2,2,2);imshow(I);title('灰度图像');%进行维纳滤波 k=0.0025; [m,n]=size(I); spectrum=zeros(m,n); H=zeros(m,n); for u=1:m for v=1:n H(u,v)=exp(-k*((u-m/2)^2+(v-n/2)^2)^(5/6)); spectrum(u,v)=H(u,v)^2; end end F0=fftshift(fft2(I)); F1=F0./H; I2=ifft2(fftshift(F1)); subplot(2,2,3); imshow(uint8(I2)); title('全逆滤波复原图像'); hw1=real(ifft2(ifftshift(H)));%转换到空域上来 result1=deconvwnr(I,hw1,0.001); result2=ifftshift(result1);%图像进行1、3象限对调,2、4象限对调 subplot(2,2,4);imshow(result2,[]);title('调用维纳滤波函数');

DPCM 图像压缩:

clc,clear all,close all; I02=imread('lena.bmp'); I=double(I02); fid1=fopen('mydata1.dat','w'); fid2=fopen('mydata2.dat','w'); fid3=fopen('mydata3.dat','w'); fid4=fopen('mydata4.dat','w'); [m,n]=size(I); %对预测信号将边缘锁定,防止程序运行时抓不到数据 J1=ones(m,n); J1(1:m,1)=I(1:m,1); J1(1,1:n)=I(1,1:n); J1(1:m,n)=I(1:m,n); J1(m,1:n)=I(m,1:n); J2=ones(m,n); J2(1:m,1)=I(1:m,1); J2(1,1:n)=I(1,1:n); J2(1:m,n)=I(1:m,n); J2(m,1:n)=I(m,1:n); J3=ones(m,n); J3(1:m,1)=I(1:m,1); J3(1,1:n)=I(1,1:n);

J3(1:m,n)=I(1:m,n); J3(m,1:n)=I(m,1:n); J4=ones(m,n); J4(1:m,1)=I(1:m,1); J4(1,1:n)=I(1,1:n); J4(1:m,n)=I(1:m,n); J4(m,1:n)=I(m,1:n); %一阶DPCM编码 for k=2:m-1 for l=2:n-1 J1(k,l)=I(k,l)-I(k,l-1); end end J1=round(J1); cont1=fwrite(fid1,J1,'int8'; cc1=fclose(fid1); %二阶DPCM编码 for k=2:m-1 for l=2:n-1 J2(k,l)=I(k,l)-(I(k,l-1)/2+I(k-1,l)/2); end end J2=round(J2); cont2=fwrite(fid2,J2,'int8'; cc2=fclose(fid2); %三阶DPCM编码 for k=2:m-1 for l=2:n-1 J3(k,l)=I(k,l)-(I(k,l-1)*(4/7)+I(k-1,l)*(2/7)+I(k-1,l-1)* (1/7)); end end J3=round(J3); cont3=fwrite(fid3,J3,'int8'); cc3=fclose(fid3); %以下是DPCM解码 fid1=fopen('mydata1.dat','r'); fid2=fopen('mydata2.dat','r'); fid3=fopen('mydata3.dat','r');

fid4=fopen('mydata4.dat','r'); I11=fread(fid1,cont1,'int8'); I12=fread(fid2,cont2,'int8'); I13=fread(fid3,cont3,'int8'); tt=1; for l=1:n for k=1:m I1(k,l)=I11(tt); tt=tt+1; end end tt=1; for l=1:n for k=1:m I2(k,l)=I12(tt); tt=tt+1; end end tt=1; for l=1:n for k=1:m I3(k,l)=I13(tt); tt=tt+1; end end I1=double(I1); I2=double(I2); I3=double(I3); J1=ones(m,n); J1(1:m,1)=I1(1:m,1); J1(1,1:n)=I1(1,1:n); J1(1:m,n)=I1(1:m,n); J1(m,1:n)=I1(m,1:n); J2=ones(m,n); J2(1:m,1)=I2(1:m,1); J2(1,1:n)=I2(1,1:n); J2(1:m,n)=I2(1:m,n); J2(m,1:n)=I2(m,1:n); J3=ones(m,n); J3(1:m,1)=I3(1:m,1); J3(1,1:n)=I3(1,1:n); J3(1:m,n)=I3(1:m,n); J3(m,1:n)=I3(m,1:n);

%一阶解码 for k=2:m-1 for l=2:n-1 J1(k,l)=I1(k,l)+J1(k,l-1); end end cc1=fclose(fid1); J1=uint8(J1); %二阶解码 for k=2:m-1 for l=2:n-1 J2(k,l)=I2(k,l)+(J2(k,l-1)/2+J2(k-1,l)/2); end end cc2=fclose(fid2); J2=uint8(J2); %三阶解码 for k=2:m-1 for l=2:n-1 J3(k,l)=I3(k,l)+(J3(k,l-1)*(4/7)+J3(k-1,l)*(2/7)+J3(k-1,l -1)*(1/7)); end end cc3=fclose(fid3); J3=uint8(J3); figure; subplot(2,2,1); imshow(I02); axis off box off title('?-????','fontsize',11); subplot(2,2,2); imshow(J1); axis off box off title('???×?¤??','fontsize',11); subplot(2,2,3); imshow(J2); axis off box off title('???×?¤??','fontsize',11);

subplot(2,2,4); imshow(J3); axis off box off title('???×?¤??','fontsize',11);


相关文章:
上机作业
('改进后图像1'); subplot(2,2,3); imshow(K2); title('改进后图像2'); 上机作业(三) :图像增强实验 1.对灰度图像进行直方图“均衡化”和“规定化”...
上机作业
上机作业_管理学_高等教育_教育专区。四川师范大学信息检索课实验题目 1、举例说明搜索引擎中 filetype、site、双引号这三个高级检索语法的 功能。要求: 1)请问上述...
上机作业1
2015 级研究生 《计算方法》作业 2015 年 11 月 上机作业 1 数值试验 3 3-1 试验目的:考察不动点迭代法的局部收敛性 试验内容: 2 x ? e x ? 3 ? 0...
上机作业
上机作业_电脑基础知识_IT/计算机_专业资料 暂无评价|0人阅读|0次下载|举报文档 上机作业_电脑基础知识_IT/计算机_专业资料。1, filetype 的用法是 filetype:文件...
我的上机作业
我的上机作业_计算机软件及应用_IT/计算机_专业资料。信息检索四川师范大学信息检索课实验题目 1、举例说明搜索引擎中 filetype、site、减号、双引号、inurl 这五个高...
第一次上机作业参考答案
第一次上机作业参考答案_理学_高等教育_教育专区。大连理工大学 c语言作业第一次上机作业参考答案: 1. 大写字母转换成小写字母从键盘输入一个大写英文字母,输出相应...
计算方法上机作业
计算方法上机作业 姓学班 名: 号: 级: 张晓丹 指导教师: 2014.11.14 第一次作业 1、分别用不动点迭代与Newton法求解方程3x-??? +4=0 的正根与负根. ...
计算机上机作业
三、上机操作题第一部份 2 上机操作题第一部份 页 1 1、 现有一个名为 888 的拨号连接, 要求配置如下属性: 电话号码从 163 改为 8888, 如果忙音重拨 100...
计算方法 上机作业
计算方法 上机作业_数学_自然科学_专业资料。计算方法上机作业计算方法 1班 姓名:程志杰 学号:g20148139 2014/11/13 目录上机作业 1...计算方法上机作业计算方法 ...
统计学上机题作业
会计1125 卜龙 110330752 统计学上机作业第一题 (1)由散点图可以发现产量与生产费用大致呈线性分布 会计 1125 卜龙 110330752 会计 1125 卜龙 110330752 (2)...
更多相关标签:
计算方法上机作业 | 信息检索上机作业 | matlab上机作业 | 传热学上机作业 | c语言上机作业及答案 | 数值分析上机作业 | 文献检索上机作业 | 西电微机原理上机作业 |