数字图像处理实验四

合集下载

数字图像处理四个实验报告,带有源程序

数字图像处理四个实验报告,带有源程序

数字图像处理实验指导书学院:通信与电子工程学院专业:电子信息工程班级:学号:姓名:XX理工大学实验一 MATLAB数字图像处理初步一、实验目的与要求1.熟悉及掌握在MATLAB中能够处理哪些格式图像。

2.熟练掌握在MATLAB中如何读取图像。

3.掌握如何利用MATLAB来获取图像的大小、颜色、高度、宽度等等相关信息。

4.掌握如何在MATLAB中按照指定要求存储一幅图像的方法。

5.图像间如何转化。

二、实验原理及知识点1、数字图像的表示和类别一幅图像可以被定义为一个二维函数f(x,y),其中x和y是空间(平面)坐标,f 在任何坐标处(x,y)处的振幅称为图像在该点的亮度。

灰度是用来表示黑白图像亮度的一个术语,而彩色图像是由单个二维图像组合形成的。

例如,在RGB彩色系统中,一幅彩色图像是由三幅独立的分量图像(红、绿、蓝)组成的。

因此,许多为黑白图像处理开发的技术适用于彩色图像处理,方法是分别处理三副独立的分量图像即可。

图像关于x和y坐标以及振幅连续。

要将这样的一幅图像转化为数字形式,就要求数字化坐标和振幅。

将坐标值数字化成为取样;将振幅数字化成为量化。

采样和量化的过程如图1所示。

因此,当f的x、y分量和振幅都是有限且离散的量时,称该图像为数字图像。

作为MATLAB基本数据类型的数值数组本身十分适于表达图像,矩阵的元素和图像的像素之间有着十分自然的对应关系。

图1 图像的采样和量化根据图像数据矩阵解释方法的不同,MA TLAB把其处理为4类:亮度图像(Intensity images)二值图像(Binary images)索引图像(Indexed images)RGB图像(RGB images)(1) 亮度图像一幅亮度图像是一个数据矩阵,其归一化的取值表示亮度。

若亮度图像的像素都是uint8类或uint16类,则它们的整数值范围分别是[0,255]和[0,65536]。

若图像是double类,则像素取值就是浮点数。

数字图像处理 实验四dct编码

数字图像处理  实验四dct编码

实验程序和结果:实验所使用的图像:1、利用Huffman进行JPEG图像压缩编码程序:I=imread('F\.jpg');pix(256)=struct('huidu',0.0,...%灰度值'number',0.0,...%对应像素的个数'bianma','');%对应灰度的编码[m n l]=size(I);fid=fopen('huffman.txt','w');%huffman.txt是灰度级及相应的编码表fid1=fopen('huff_compara.txt','w');%huff_compara.txt是编码表huf_bac=cell(1,l);for t=1:l%初始化结构数组for i=1:256pix(i).number=1;pix(i).huidu=i-1;%灰度级是0—255,因此是i-1pix(i).bianma='';end%统计每种灰度像素的个数记录在pix数组中for i=1:mfor j=1:nk=I(i,j,t)+1;%当前的灰度级pix(k).number=1+pix(k).number;endend%按灰度像素个数从大到小排序for i=1:255for j=i+1:256if pix(i).number<pix(j).numbertemp=pix(j);pix(j)=pix(i);pix(i)=temp;endendend%因为有的灰度值在图像中可能没有对应的像素值,所以要%找出在图像中存在像素的灰度级的个数,并保存在num中for i=256:-1:1if pix(i).number ~=0break;endendnum=i;count(t)=i;%记录每层灰度级%定义用于求解的矩阵clear huffmanhuffman(num,num)=struct('huidu',0.0,...'number',0.0,...'bianma','');huffman(num,:)=pix(1:num);%矩阵赋值for i=num-1:-1:1p=1;%算出队列中数量最少的两种灰度的像素个数的和sum=huffman(i+1,i+1).number+huffman(i+1,i).number;for j=1:i%如果当前要复制的结构体的像素个数大于sum就直接复制if huffman(i+1,p).number>sumhuffman(i,j)=huffman(i+1,p);p=p+1;else%如果当前要复制的结构体的像素个数小于或等于sum就插入和的结构体%灰度值为-1标志这个结构体的number是两种灰度像素的和huffman(i,j).huidu=-1;huffman(i,j).number=sum;sum=0;huffman(i,j+1:i)=huffman(i+1,j:i-1);break;endendend%开始给每个灰度值编码for i=1:num-1obj=0;for j=1:iif huffman(i,j).huidu==-1obj=j;break;elsehuffman(i+1,j).bianma=huffman(i,j).bianma;endendif huffman(i+1,i+1).number>huffman(i+1,i).number%说明:大概率的编0,小概率的编1,概率相等的,标号大的为1,标号小的为0 huffman(i+1,i+1).bianma=[huffman(i,obj).bianma '0'];huffman(i+1,i).bianma=[huffman(i,obj).bianma '1'];elsehuffman(i+1,i+1).bianma=[huffman(i,obj).bianma '1'];huffman(i+1,i).bianma=[huffman(i,obj).bianma '0'];endfor j=obj+1:ihuffman(i+1,j-1).bianma=huffman(i,j).bianma;endendfor k=1:count(t)huf_bac(t,k)={huffman(num,k)}; %保存endend%写出灰度编码表for t=1:lfor b=1:count(t)fprintf(fid,'%d',huf_bac{t,b}.huidu);fwrite(fid,' ');fprintf(fid,'%s',huf_bac{t,b}.bianma);fwrite(fid,' ');endfwrite(fid,'%');%先写灰度值,再写灰度级所对应的哈夫曼编码,并用将每个层级的灰度隔开end%按原图像数据,写出相应的编码,也就是将原数据用哈夫曼编码替代for t=1:lfor i=1:mfor j=1:nfor b=1:count(t)if I(i,j,t)==huf_bac{t,b}.huiduM(i,j,t)=huf_bac{t,b}.huidu;%将灰度级存入解码的矩阵fprintf(fid1,'%s',huf_bac{t,b}.bianma);fwrite(fid1,' ');%用空格将每个灰度编码隔开break;endendendfwrite(fid1,',');%用空格将每行隔开endfwrite(fid1,'%');%用%将每层灰度级代码隔开endfclose(fid);fclose(fid1);M=uint8(M);save('M')%存储解码矩阵编码结果:Huffman编码表:Huffman代码:Huffman解码程序:function huf_decode%哈夫曼编码解码load MI=imread('F:\Heat.jpg');subplot(1,2,1),imshow(I),title('原图')%读出原图subplot(1,2,2),imshow(M),title('huffman解码后的图')%读出解码后的图解码结果:2、利用行程编码进行图像压缩的MATLAB程序function yc%行程编码算法%读图I=imread('zbz.jpg');[m n l]=size(I);fid=fopen('yc.txt','w');%yc.txt是行程编码算法的灰度级及其相应的编码表%行程编码算法sum=0;for k=1:lfor i=1:mnum=0;J=[];value=I(i,1,k);for j=2:nif I(i,j,k)==valuenum=num+1;%统计相邻像素灰度级相等的个数if j==nJ=[J,num,value];endelse J=[J,num,value];%J的形式是先是灰度的个数及该灰度的值 value=I(i,j,k);num=1;endendcol(i,k)=size(J,2);%记录Y中每行行程行程编码数sum=sum+col(i,k);Y(i,1:col(i,k),k)=J;%将I中每一行的行程编码J存入Y的相应行中 endend%输出相关数据[m1,n1,l1]=size(Y);disp('原图像大小:')whos('I');disp('压缩图像大小:')whos('Y');disp('图像的压缩比:');disp(m*n*l/sum);%将编码写入yc.txt中for k=1:l1for i=1:m1for j=1:col(i,k)fprintf(fid,'%d',Y(i,j,k));fwrite(fid,' ');endendfwrite(fid,' ');endsave('Y')%存储,以便解码用save('col')fclose(fid);结果:编码代码:function yc_decode%行程编编码解码load Y %下载行程编码Yload col %下载Y中每行行程行程编码数[m,n,l]=size(Y);for k=1:lfor i=1:mp=1;for j=1:2:col(i,k)d=Y(i,j,k);%灰度值的个数for c=p:p+d-1X(i,c,k)=Y(i,j+1,k);%将d个灰度值存入X中endp=p+d;endendendI=imread('zbz.jpg');subplot(1,2,1),imshow(I),title('原图')%读出原图subplot(1,2,2),imshow(X),title('行程编码解码后的图')%读出解码后的图解码后:3、利用DCT进行图像压缩的MATLAB程序I=imread(‘rice.png’); %读入原图像;I=im2double(I); %将原图像转为双精度数据类型;T=dctmtx(8); %产生二维DCT变换矩阵B=blkproc(I,[8 8],’P1*x*P2’,T,T’); %计算二维DCT,矩阵T 及其转置T’是DCT函数P1*x*P2的参数Mask=[ 1 1 1 1 0 0 0 01 1 1 0 0 0 0 01 1 0 0 0 0 0 01 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0]; %二值掩膜,用来压缩DCT系数,只留下DCT系数中左上角的10个B2=blkproc(B,[8 8],’ P1.*x.’,mask); %只保留DCT变换的10个系数I2= blkproc(B2,[8,8],’P1*x*P2’,T’,T); %逆DCT,重构图像Subplot(1,2,1);Imshow(I);title(‘原图像’); %显示原图像Subplot(1,2,2);Imshow(I2);title(‘压缩图像’);%显示压缩后的图像实验结果:。

数字图像处理 实验报告四

数字图像处理 实验报告四

实验四空域滤波一,实验目的:实现图像的线性滤波和非线性滤波变换二,实验条件1,MATLAB软件2,典型的灰度,彩色图像。

三,实验原理均值滤波是在空间域对图象进行平滑处理的一种方法,易于实现,效果也挺好。

表达式的算法是由某像素领域内各点灰度值的平均值来代替该像素原来的灰度值。

最大(小)值滤波,中值滤波是一种非线性处理技术,能抑制图象中的噪声。

在处理之后,位于窗口正中的像素的灰度值,用窗口内各像素灰度值的最大(小),中值代替。

四,实验内容(1)线性滤波,自行编写程序,实现图像的均值滤波。

模板3*3,5*5,7*7。

(2)非线性滤波,自行编写程序,实现图像的统计序滤波,(最大(小)值,中值(median),滤波)模板3*3,5*5,7*7。

(3)将滤波前后的图像进行比较,分析其异同;将原图像加噪处理(imnoise)之后,再滤波处理,结果又如何五,实验步骤(1)线性滤波,实现图像的均值滤波。

模板3*3,5*5,7*7。

以下以3*3为例:代码大致思路如下:先对图片灰度矩阵除去四边后的部分进行计算。

然后对四边除去四角后进行计算,最后对四角进行计算。

鉴于这个方法比较繁琐麻烦,所以在非线性滤波程序中改用了别的方法处理3*3模板。

I=imread('a.jpg');J=rgb2gray(I);J=double(J);A0=zeros(287,287); %A0为线性变换后的图像for i=2:286 %对图片灰度矩阵除去四边后的部分进行计算for j=2:286A0(i,j)=(1/9)*(J(i-1,j-1)+J(i-1,j)+J(i-1,j+1)+J(i,j-1)+J(i,j)+J(i,j+1)+J(i+1,j-1)+J(i+1,j)+J(i+1,j+1));endendfor i=2:286 %对四边除去四角后进行计算A0(1,i)=(1/9)*(J(i,j-1)+J(i,j)+J(i,j+1)+J(i+1,j-1)+J(i+1,j)+J(i+1,j+1));A0(287,i)=(1/9)*(J(i-1,j-1)+J(i-1,j)+J(i-1,j+1)+J(i,j-1)+J(i,j)+J(i,j+1));A0(i,1)=(1/9)*(J(i-1,j)+J(i-1,j+1)+J(i,j)+J(i,j+1)+J(i+1,j)+J(i+1,j+1));A0(i,287)=(1/9)*(J(i-1,j-1)+J(i-1,j)+J(i,j-1)+J(i,j)+J(i+1,j-1)+J(i+1,j+1));endA0(1,1)=(1/9)*(J(i,j)+J(i,j+1)+J(i+1,j)+J(i+1,j+1)); %对四角进行计算A0(1,287)=(1/9)*(J(i,j-1)+J(i,j)+J(i+1,j-1)+J(i+1,j+1));A0(287,1)=(1/9)*(J(i-1,j)+J(i-1,j+1)+J(i,j)+J(i,j+1));A0(287,287)=(1/9)*(J(i-1,j-1)+J(i-1,j)+J(i,j-1)+J(i,j));imshow(A0);线性滤波的图像如图一所示:5010015020025050100150200250图一线性变换(2)非线性滤波,实现图像的统计序滤波,(最大(小)值,中值(median )滤波)模板3*3,5*5,7*7。

数字图像处理实验报告

数字图像处理实验报告

目录实验一:数字图像的基本处理操作 (4):实验目的 (4):实验任务和要求 (4):实验步骤和结果 (5):结果分析 (8)实验二:图像的灰度变换和直方图变换 (9):实验目的 (9):实验任务和要求 (9):实验步骤和结果 (9):结果分析 (13)实验三:图像的平滑处理 (14):实验目的 (14):实验任务和要求 (14):实验步骤和结果 (14):结果分析 (18)实验四:图像的锐化处理 (19):实验目的 (19):实验任务和要求 (19):实验步骤和结果 (19):结果分析 (21)实验一:数字图像的基本处理操作:实验目的1、熟悉并掌握MATLAB、PHOTOSHOP等工具的使用;2、实现图像的读取、显示、代数运算和简单变换。

3、熟悉及掌握图像的傅里叶变换原理及性质,实现图像的傅里叶变换。

:实验任务和要求1.读入一幅RGB图像,变换为灰度图像和二值图像,并在同一个窗口内分成三个子窗口来分别显示RGB图像和灰度图像,注上文字标题。

2.对两幅不同图像执行加、减、乘、除操作,在同一个窗口内分成五个子窗口来分别显示,注上文字标题。

3.对一幅图像进行平移,显示原始图像与处理后图像,分别对其进行傅里叶变换,显示变换后结果,分析原图的傅里叶谱与平移后傅里叶频谱的对应关系。

4.对一幅图像进行旋转,显示原始图像与处理后图像,分别对其进行傅里叶变换,显示变换后结果,分析原图的傅里叶谱与旋转后傅里叶频谱的对应关系。

:实验步骤和结果1.对实验任务1的实现代码如下:a=imread('d:\');i=rgb2gray(a);I=im2bw(a,;subplot(1,3,1);imshow(a);title('原图像');subplot(1,3,2);imshow(i);title('灰度图像');subplot(1,3,3);imshow(I);title('二值图像');subplot(1,3,1);imshow(a);title('原图像');结果如图所示:图原图及其灰度图像,二值图像2.对实验任务2的实现代码如下:a=imread('d:\');A=imresize(a,[800 800]);b=imread('d:\');B=imresize(b,[800 800]);Z1=imadd(A,B);Z2=imsubtract(A,B);Z3=immultiply(A,B);Z4=imdivide(A,B);subplot(3,2,1);imshow(A);title('原图像 A'); subplot(3,2,2);imshow(B);title('原图像 B'); subplot(3,2,3);imshow(Z1);title('加法图像'); subplot(3,2,4);imshow(Z2);title('减法图像'); subplot(3,2,5);imshow(Z3);title('乘法图像'); subplot(3,2,6);imshow(Z2);title('除法图像');结果如图所示:3.对实验任务3的实现代码如下:s=imread('d:\');i=rgb2gray(s);i=double(i);j=fft2(i);k=fftshift(j); %直流分量移到频谱中心I=log(abs(k)); %对数变换m=fftshift(j); %直流分量移到频谱中心RR=real(m); %取傅里叶变换的实部II=imag(m); %取傅里叶变换的虚部A=sqrt(RR.^2+II.^2);A=(A-min(min(A)))/(max(max(A)))*255;b=circshift(s,[800 450]);b=rgb2gray(b);b=double(b);c=fft2(b);e=fftshift(c);I=log(abs(e));f=fftshift(c);WW=real(f);ZZ=imag(f);B=sqrt(WW.^2+ZZ.^2);B=(B-min(min(B)))/(max(max(B)))*255;subplot(2,2,1);imshow(s);title('原图像');subplot(2,2,2);imshow(uint8(b));title('平移图像');subplot(2,2,3);imshow(A);title('离散傅里叶变换频谱');subplot(2,2,4);imshow(B);title('平移图像离散傅里叶变换频谱');结果如图所示:4.对实验任务4的实现代码如下:s=imread('d:\');i=rgb2gray(s);i=double(i);j=fft2(i);k=fftshift(j);I=log(abs(k));m=fftshift(j);RR=real(m);II=imag(m);A=sqrt(RR.^2+II.^2);A=(A-min(min(A)))/(max(max(A)))*255;b=imrotate(s,-90);b=rgb2gray(b);b=double(b);c=fft2(b);e=fftshift(c);I=log(abs(e));f=fftshift(c);WW=real(f);ZZ=imag(f);B=sqrt(WW.^2+ZZ.^2);B=(B-min(min(B)))/(max(max(B)))*255;subplot(2,2,1);imshow(s);title('原图像');subplot(2,2,2);imshow(uint8(b));title('平移图像');subplot(2,2,3);imshow(A);title('离散傅里叶频谱');subplot(2,2,4);imshow(B);title('平移图像离散傅里叶频谱');结果如图所示::结果分析对MATLAB软件的操作开始时不太熟悉,许多语法和函数都不会使用,写出程序后,调试运行,最开始无法显示图像,检查原因,是有些标点符号没有在英文状态下输入和一些其他的细节,学会了imread(),imshow(),rgb2gray()等函数。

西安石油大学数字图像处理实验报告四

西安石油大学数字图像处理实验报告四

《数字图像处理》实验四题目图像分割专业班级学号姓名时间实验报告课程名称数字图像处理实验名称图像分割姓名____________ 学号专业班级____ _实验日期成绩______ _指导教师____ _一、实验目的1、掌握图像分割的原理2、掌握基于阈值的分割方法二、实验原理迭代阈值法(1)选择一个初始阈值T1(2)根据初始阈值T1将图像分割为G1和G2两个部分,分别求出G1和G2的平均灰度值m1和m2;(3)计算新的阈值T2= (m1+m2)/2;(4)如果| T1 –T2 |≤ T0,终止迭代。

否则令T1= T2,重复步骤(2)和(3),最后的T2就是所求的最优阈值。

初始阈值T1的选取:当目标与背景面积相当时,将T1设为整幅图像的平均灰度当目标与背景面积相差较远时,将T1设为最大灰度与最小灰度的中间值。

质心型区域生长算法:(1)确定初始种子点,阈值;(2)对图像进行逐行扫描,找出尚没有归属的像素;(3)比较已存在区域的像素灰度平均值与该区域邻接的像素灰度值,若差值小于阈值,则合并;(4)以新合并的像素为中心,重复步骤(3),检查新像素的邻域,直到区域不能进一步扩张;(5)返回到步骤(2),继续扫描直到不能发现没有归属的像素,则结束整个生长过程。

迭代阈值算法原理:三、实验环境操作系统:Windows 8.1软件:Matlab 2016a四、实验内容与步骤1、利用im2bw()实现固定阈值分割,完成对一幅灰度图像的二值分割,调整阈值,记录并分析实验结果;>> yuantu=imread('C:\Users\wangdediannao1\Desktop\a.jpg');%原图如图一所示>> hudutu=rgb2gray(yuantu);>> figure;>> imshow(hudutu); %转化为灰度图像,如图二所示>> bianhuan=im2bw(hudutu,0.3); %实现固定阈值分割, 阈值为0.3>> figure;>> imshow(bianhuan); %显示固定固定阈值分割分割后的图像,如图三所示>> bianhuan1=im2bw(hudutu,0.5); %实现固定阈值分割, 阈值为0.5>> figure;>> imshow(bianhuan1); %显示固定固定阈值分割分割后的图像,如图四所示2、编写迭代阈值法程序,记录迭代得出的最优阈值,利用该阈值实现图像的分割;>> j=double(hudutu);>> t=(min(j(:))+max(j(:)))/2; %设置初始阈值>> done=false;>> i=0;>> while ~doner1=find(j<=t);%找出不大于t的所有像素点索引值r2=find(j>t);%找出大于t的所有像素点索引值tnew=(mean(j(r1))+mean(j(r2)))/2;%计算心得阈值done=abs(tnew-t)<1;t=tnew;i=i+1;end>> j(r1)=0;%小于阈值的为黑>> j(r2)=1;%大于阈值的为白>> figure;>> imshow(j);%显示处理结果如图五所示五、实验结果与分析(可提供屏幕抓图)图一图二图三图四图五六、实验心得与体会熟悉了Matlab软件,以及在Matlab中对于图像处理的方法,对matlab有了一个全新的认识,其次是对matlab中的图像阈值处理操作和命令的使用有了更高的掌握。

数字图像处理实验报告(三四五)

数字图像处理实验报告(三四五)

实验三图像的几何变换一.实验目的及要求掌握图像几何变换的基本原理,熟练掌握数字图像的缩放、旋转、平移、镜像和转置的基本原理及其MATLAB编程实现方法。

二、实验内容(一)研究以下程序,分析程序功能;输入执行各命令行,认真观察命令执行的结果。

熟悉程序中所使用函数的调用方法,改变有关参数,观察试验结果。

1. 图像缩放clear all, close allI = imread('cameraman.tif');Scale = 1.35; % 将图像放大1.35倍J1 = imresize(I, Scale, 'nearest'); %using the nearest neighbor interpolationJ2 = imresize(I, Scale, 'bilinear'); %using the bilinear interpolationimshow(I), title('Original Image');figure, imshow(J1), title('Resized Image-- using the nearest neighbor interpolation ');figure, imshow(J2), title('Resized Image-- using the bilinear interpolation ');% 查看imresize使用帮助help imresizeCommand窗口显示如下:IMRESIZE Resize image.B = IMRESIZE(A, SCALE) returns an image that is SCALE times thesize of A, which is a grayscale, RGB, or binary image.B = IMRESIZE(A, [NUMROWS NUMCOLS]) resizes the image so that it hasthe specified number of rows and columns. Either NUMROWS or NUMCOLS may be NaN, in which case IMRESIZE computes the number of rows orcolumns automatically in order to preserve the image aspect ratio.[Y, NEWMAP] = IMRESIZE(X, MAP, SCALE) resizes an indexed image.[Y, NEWMAP] = IMRESIZE(X, MAP, [NUMROWS NUMCOLS]) resizes an indexed image.T o control the interpolation method used by IMRESIZE, add a METHODargument to any of the syntaxes above, like this:IMRESIZE(A, SCALE, METHOD)IMRESIZE(A, [NUMROWS NUMCOLS], METHOD),IMRESIZE(X, MAP, M, METHOD)IMRESIZE(X, MAP, [NUMROWS NUMCOLS], METHOD) METHOD can be a string naming a general interpolation method: 'nearest' - nearest-neighbor interpolation'bilinear' - bilinear interpolation'bicubic' - cubic interpolation; the default method METHOD can also be a string naming an interpolation kernel: 'box' - interpolation with a box-shaped kernel'triangle' - interpolation with a triangular kernel(equivalent to 'bilinear')'cubic' - interpolation with a cubic kernel(equivalent to 'bicubic')'lanczos2' - interpolation with a Lanczos-2 kernel'lanczos3' - interpolation with a Lanczos-3 kernelFinally, METHOD can be a two-element cell array of the form {f,w}, where f is the function handle for a custom interpolation kernel, andw is the custom kernel's width. f(x) must be zero outside the interval -w/2 <= x < w/2. Your function handle f may be called with a scalar or a vector input.You can achieve additional control over IMRESIZE by using parameter/value pairs following any of the syntaxes above. For example:B = IMRESIZE(A, SCALE, PARAM1, VALUE1, PARAM2, VALUE2, ...)Parameters include:'Antialiasing' - true or false; specifies whether to performantialiasing when shrinking an image. Thedefault value depends on the interpolationmethod you choose. For the 'nearest' method,the default is false; for all other methods,the default is true.'Colormap' - (only relevant for indexed images) 'original'or 'optimized'; if 'original', then theoutput newmap is the same as the input map.If it is 'optimized', then a new optimizedcolormap is created. The default value is'optimized'.'Dither' - (only for indexed images) true or false;specifies whether to perform colordithering. The default value is true.'Method' - As described above'OutputSize' - A two-element vector, [MROWS NCOLS],specifying the output size. One element maybe NaN, in which case the other value iscomputed automatically to preserve the aspectratio of the image.'Scale' - A scalar or two-element vector specifying theresize scale factors. If it is a scalar, thesame scale factor is applied to eachdimension. If it is a vector, it containsthe scale factors for the row and columndimensions, respectively.Examples--------Shrink by factor of two using the defaults of bicubic interpolation and antialiasing.I = imread('rice.png');J = imresize(I, 0.5);figure, imshow(I), figure, imshow(J)Shrink by factor of two using nearest-neighbor interpolation. (This is the fastest method, but it has the lowest quality.)J2 = imresize(I, 0.5, 'nearest');Resize an indexed image.[X, map] = imread('trees.tif');[Y, newmap] = imresize(X, map, 0.5);imshow(Y, newmap)Resize an RGB image to have 64 rows. The number of columns is computed automatically.RGB = imread('peppers.png');RGB2 = imresize(RGB, [64 NaN]);Note----The function IMRESIZE in previous versions of the Image ProcessingT oolbox used a somewhat different algorithm by default. If you need the same results produced by the previous implementation, call the function IMRESIZE_OLD.Class Support-------------The input image A can be numeric or logical and it must be nonsparse. The output image is of the same class as the input image. The inputindexed image X can be uint8, uint16, or double.See also imresize_old, imrotate, imtransform, tformarray.Reference page in Help browserdoc imresize执行程序所得结果如下:改变参数Scale =0.5得到图形结果如下:对以上实验结果,分析如下:通过查看命令窗口查看imresize函数的使用方法。

实验四图像增强

实验四图像增强

实验四-图像增强信息工程学院实验报告课程名称:数字图像处理班级: 姓名: 学号:一、实验目的1.了解图像增强的目的及意义,加深对图像增强的感性认识,巩固所学理论知识。

2. 掌握图像空域增强算法的基本原理。

3. 掌握图像空域增强的实际应用及MATLAB 实现。

4. 掌握频域滤波的概念及方法。

5. 熟练掌握频域空间的各类滤波器。

6.掌握怎样利用傅立叶变换进行频域滤波。

7. 掌握图像频域增强增强的实际应用及MATLAB 实现。

二、实验步骤及结果分析1. 基于幂次变换的图像增强 程序代码:clear all ; close all ;I{1}=double(imread('fig534b.tif')); I{1}=I{1}/255;figure,subplot(2,4,1);imshow(I{1},[]);hold on I{2}=double(imread('room.tif')); I{2}=I{2}/255;subplot(2,4,5);imshow(I{2},[]);hold on for m=1:2 Index=0;for lemta=[0.5 5] Index=Index+1;F{m}{Index}=I{m}.^lemta;subplot(2,4,(m-1)*4+Index+1),imshow(F{m}{Index},[]) end end成 绩:指导老师(签名):执行结果:图1 幂次变换增强结果实验结果分析:由实验结果可知,当r<1时,黑色区域被扩展,变的清晰;当r>1时,黑色区域被压缩,变的几乎不可见。

2.直方图规定化处理程序代码:clear allclcclose all%0.读图像I=double(imread('lena.tiff'));subplot(2,4,1);imshow(I,[]);title('原图')N=32;Hist_image=hist(I(:),N);Hist_image=Hist_image/sum(Hist_image);Hist_image_cumulation=cumsum(Hist_image);%累计直方图subplot(245);stem(0:N-1,Hist_image);title('原直方图');%1.设计目标直方图Index=0:N-1;%正态分布直方图Hist{1}=exp(-(Index-N/2).^2/N);Hist{1}=Hist{1}/sum(Hist{1});Hist_cumulation{1}=cumsum(Hist{1});subplot(242);stem([0:N-1],Hist{1});title('规定化直方图1');%倒三角形状直方图Hist{2}=abs(2*N-1-2*Index);Hist{2}=Hist{2}/sum(Hist{2});Hist_cumulation{2}=cumsum(Hist{2});subplot(246);stem(0:N-1,Hist{2});title('规定化直方图2');%2. 规定化处理Project{1}=zeros(N);Project{2}=zeros(N);Hist_result{1}=zeros(N);Hist_result{2}=zeros(N);for m=1:2Image=I;%SML 处理(SML,Single Mapping Law 单映射规则 for k=1:NTemp=abs(Hist_image_cumulation(k)-Hist_cumulation{m});[Temp1,Project{m}(k)]=min(Temp); end%2.2 变换后直方图 for k=1:NTemp=find(Project{m}==k); if isempty(Temp) Hist_result{m}(k)=0; elseHist_result{m}(k)=sum(Hist_imag e(Temp)); end endsubplot(2,4,(m-1)*4+3); stem(0:N-1,Hist_result{m}); title(['变换后的直方图',num2str(m)]); %2.3结果图 Step=256/N; for K=1:NIndex=find(I>=Step*(k-1)&I<Step *k);Image(Index)=Project{m}(k); endsubplot(2,4,(m-1)*4+4),imshow(I mage,[]);title(['变换后的结果图',num2str(m)]); end执行结果:原图0.020.040.060.080.100.020.040.060.080.100.020.040.060.08规定化直方图220400.050.10.150.2变换后的直方图1变换后的结果图1020400.020.040.060.080.10.12变换后的直方图2变换后的结果图2图2 直方图规定化实验结果分析:由实验结果可知,采用直方图规定化技术后,原图的直方图逼近规定化的直方图,从而有相应的变换后的结果图1和变换后的结果图2。

数字图像处理实验4-图像增强(1)

数字图像处理实验4-图像增强(1)

实验时间:200 年月日实验小组:第组组长:组员:组员:指导教师签名:实验情况评定:实验四图像增强(1)实验目的:通过实验掌握下列知识:1、学习常见的图像增强的方法并实际体会图像增强前后画质的变化;2、了解几种不同增强方式用于不同图像处理所取得的效果(全域线性变换和分段线性变换);3、初步掌握简单算法的代码实现的方法;4、初步了解MFC的一些初步编程技巧;内容及步骤一、通过VC实现一个全域线性变换:1、按照前面实验介绍的方法,建立一个ImageProcessing Wizard工程;2、选择菜单里的工程->设置,选择C/C++选项卡,Y分类下拉条里选择CodeGeneration,然后在Struct member alignment中选择1 Byte;3、利用试验三介绍的方法,通过CBmp类读入“pictures”文件夹中的“图片1.bmp”:a.给CxxxxDlg类添加一个成员变量CBmp* bmp1;b.在CxxxxDlg类的消息处理函数OnInitDialog里添加CBmp的初始化代码,以及图形文件的装载代码;c.在CxxxxDlg类的消息处理函数DestroyWindow()里添加如下代码,防止内存泄漏:delete bmp1;3、在CxxxxDlg类的消息处理函数OnOK里,增加如下代码:struct rgb tx;for(int i=0; i<bmp1->nWidth; i++)for(int j=0; j<bmp1->nHeight; j++) {tx = bmp1->pImageData[j*bmp1->nWidth+i];//此处添加图形增强的代码}for(i=0; i<bmp1->nWidth; i++) //此处显示处理后的图形for(int j=0; j<bmp1->nHeight; j++) {tx = bmp1->pImageData[j*bmp1->nWidth+i];pDC->SetPixel(i, j, RGB(tx.red, tx.grn, tx.blu));}4、在上述代码中间添加图形增强的代码,应该注意:读取的是彩色图形,所以在进行全域线性变换时,应针对每一个基色分别进行全域线性变换;5、全域线性变换的参数:a=0,b=255,c=50,d=150;二、通过VC实现一个分段线性变换:1、1-3步骤与上一个实验相同,这里是针对“pictures”文件夹中的“图片2.bmp”,这个实验是针对图形进行分段线性变换;4、分段线性变换的参数为:a=145、b=220、c=175、d=210;5、同样应该注意:读取的是彩色图形,所以在进行分段线性变换时,应针对每一个基色分别进行分段线性变换;6、运行并观察运行结果;实验报告要求:1、记录你编写的全域线性实验代码;2、记录你编写的分段线性实验代码;。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字图像处理—实验四
一.实验内容:
⑴图像的锐化:使用Sobel,Laplacian算子分别对图像进行运算,观察并体会运算结果。

⑵综合练习:对需要进行处理的图像分析,正确运用所学的知识,采用正确的步骤,对图像进行各类处理,以得到令人满意的图像效果。

[3] 编程实现Roberts梯度锐化算法。

二.实验目的:
学会用Matlab中的下列函数对输入图像按实验内容进行运算;感受各种不同的图像处理方法对最终图像效果的影
响。

imfilter;fspecial;imadjust;
三.实验步骤:
1.仔细阅读Matlab帮助文件中有关以上函数的使用说明,能充分理解其使用方法并能运用它们完成实验内
容。

2.将cameraman.jpg图像文件读入Matlab,使用imfilter函数分别采用Sobel,Laplacian算子对其作锐化运算,
显示运算前后的图像。

算子输入方法(两种方法都
做):
(1)用fspecial函数产生(注意:fspecial仅能产生垂直方向
sobel算子,产生Laplacian算子时alpha参数选择0,详
见Help)。

(2)直接输入,其中Sobel算子形式为
(水平Sobel)(垂直Sobel)
Laplacian算子形式为。

对于Sobel算子,采用生成图像;对于Laplacian算子,
直接采用计算结果作为锐化后图像。

figure;
subplot(2,3,1);
i1=imread('D:\images\cameraman.tif');
i1=im2double(i1);
imshow(i1);title('Input Image');
subplot(2,3,2);
h=fspecial('sobel');
g=h.';
T1= imfilter(i1, h);
T2=imfilter(i1, g);
T3=sqrt(T1.^2+T2.^2);
imshow(T3);title('方法一sobel算子'); subplot(2,3,3);
h = fspecial('laplacian',0);
T4= imfilter(i1, h);
imshow(T4);title('方法一laplacian算子'); subplot(2,3,4);
dx=[-1 -2 -1
0 0 0
1 2 1];
dy=[-1 0 1
-2 0 2
-1 0 1];
T5= imfilter(i1, dx);
T6= imfilter(i1, dy);
T7=sqrt(T1.^2+T2.^2);
imshow(T7);title('方法二sobel算子');
subplot(2,3,5);
h = [0 -1 0
-1 4 -1
0 -1 0];
T8= imfilter(i1, h);
imshow(T8);title('方法二laplacian算子');
3.将skeleton.jpg图像文件读入Matlab,按照以下步骤对其进行处理:
1)用带对角线的Laplacian对其处理,以增强边缘。

对角线Laplacian算子为。

2)将1)结果叠加到原始图像上。

可以看出噪声增强了(Laplacian算子对噪声敏感),应想法降低。

3)获取Sobel图像并用imfilter对其进行5×5邻域平均,以减少噪声。

4)获取2)和3)相乘图像,噪声得以减少。

5)将4)结果叠加到原始图像上。

6)最后用imadjust函数对5)结果做幂指数为0.2的灰度变换。

figure;
subplot(2,4,1);
i1=imread('D:\images\skeleton.jpg');
i1=im2double(i1);
imshow(i1);title('Input Image');
subplot(2,4,2);
h = [-1 -1 -1
-1 8 -1
-1 -1 -1];
T1= imfilter(i1, h);
imshow(T1);title('laplacian算子');
subplot(2,4,3);
T2=T1+i1;
imshow(T2);title('1)叠加原图像');
subplot(2,4,4);
h=fspecial('sobel');
T3=imfilter(i1,h);
imshow(T3);title('sobel算子');
subplot(2,4,5);
h = fspecial('average',[5 5]);
T4=imfilter(T3,h);
imshow(T4);title('5*5邻域平均');
subplot(2,4,6);
T5=T2.*T4;
imshow(T5);title('2)和3)相乘');
subplot(2,4,7);
T6=T5+i1;
imshow(T6);title('4)叠加原图像');
subplot(2,4,8);
T7=imadjust(T6,[],[],0.2);
imshow(T7);title('output image');
4.编写Roberts梯度锐化函数。

Roberts梯度为。

锐化图像的形成以下式为准,
L G=255,L B=0,门限T适当选择。

要求:输入参数为待锐化图像和设定的门限,输出为锐化后图像。

读入
cell.jpg图像进行验证。

显示图像时给出选择的门限值。

方法一:调用函数grad1.m
function T=grad1(x,n)
x=double(x);
[dx,dy]=gradient(x);
T1=abs(dx)+abs(dy);
T=T1;
P=find(T1>=n);
T(P)=255;
Q=find(T1<n);
T(Q)=0;
End
Roberts.m
figure;
subplot(1,2,1);
i1=imread('D:\images\cell.jpg');
imshow(i1);title('Input Image');
out1=grad1(i1,5);
subplot(1,2,2);
imshow(out1);title('Output Image T=5'); imwrite(out1,'adjusted0.jpg','jpg');
方法二:或者用此函数实现figure;
subplot(1,2,1);
i1=imread('D:\images\cell.jpg');
imshow(i1);title('Input Image');
i1=double(i1);
[dx,dy]=gradient(i1);
G=abs(dx)+abs(dy);
T=7;
g=G;
P=find(G>=T);
g(P)=255;
Q=find(G<T);
g(Q)=0;
subplot(1,2,2);
imshow(g);title('Output Image T=7');
imwrite(g,'adjusted0.jpg','jpg');
四.实验报告要求:
用imshow函数显示经每一步处理后的图像,提交Roberts梯度锐化程序。

本次实验后要求认真写出四次实验的心得体会。

汪玲
2012/2/28。

相关文档
最新文档