数字图像处理实验四
- 格式:doc
- 大小:106.50 KB
- 文档页数:4
实验程序和结果:实验所使用的图像: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(‘压缩图像’);%显示压缩后的图像实验结果:。
西华大学实验报告西华大学实验报告(理工类)开课学院及实验室:机械工程与自动化学院专业实验中心 实验时间 :2013年 月 日学 生 姓 名学 号成 绩学生所在学院 机械工程与自动化学院年级/专业/班 2010机电4班 课 程 名 称 数字图像处理课 程 代 码 6003619实验项目名称 图像分割和目标识别项 目 代 码 指 导 教 师蒋代君项 目 学 分一、实验目的1、 掌握在MA TLAB 中边缘检测的方法;2、 了解图像分割的基本策略及方法;3、 掌握用MA TLAB 语言进行边缘检测和目标识别的方法。
二、实验原理1、 阈值分割是对一幅图象的目标和背景进行判定,⎩⎨⎧≥=elsey x f Ty x f G y x f G y x g ),()],([)],([),(2、 用中值滤波器去除图像中的噪声;3、 二值形态学基本公式:设A 表示一副二值图像,B 为结构元素则A 关于B 的膨胀和腐蚀变换分别定义为: {|(())}x A B x A B ∧⊕=⋂≠Φ{|(())}c x A B x A B Θ=⋂≠Φ其中B ∧是B 的映像。
腐蚀是表示用某种形状的结构元素对一个图像进行探测,以便找出图像内部可以放下该结构元素的区域。
它是一种消除边界点,使边界向内部收缩的过程。
可以用来消除小且无意义的物体。
三、实验设备、仪器及材料1、 计算机2、 MatLab 软件/语言包括图像处理工具箱(Image Processing Toolbox) 实验所需要的图片第 组]},[],,[|),({),(000000N y N y y N x N x x y x f Med y x f +-∈+-∈=四、实验步骤(按照实际操作过程)1、读出chrimage.bmp这幅图像,转换为灰度图像。
2、用中值滤波器去除图像中的噪声;3、采用阈值分割将图像转换为二值图像;4、对二值图像进行形态学操作,获得分析值。
五、实验过程记录(数据、图表、计算等)1.读出chrimage.bmp这幅图像,转换为灰度图像,用中值滤波器去除图像中的噪声:I = imread('chrimage.bmp');I2 = rgb2gray(I);imshow(I)s = size(I2);I4 = 255*ones(s(1), s(2), 'uint8');I5 = imsubtract(I4,I2);figure,imshow(I5);2将图像转化为二值图像。
精品资料
数字图像处理实验四
报告
........................................
贵州大学实验报告学院:专业:班级:
3、维纳滤波
复原公式:
如果噪声为0,则维纳滤波退化为逆滤波。
如果噪声功率谱和信号功率谱都是未知或不能估计时可近似为:实
验仪器计算机一台;Matlab软件
实验步骤1、编写逆滤波复原程序。
读取图像,人工产生一个模糊图像,通过逆滤波方法对该模糊复原。
人工产生一个模糊且带有噪声的图像,过逆滤波方法对该模糊复原。
比较无噪声和有噪声时逆滤波的复原效果。
计算复原后图像的PSNR。
MES1=abs(sum(sum((I-I2).^2))/(m*n)) %均方差PSNR1=20*log10(MAX/sqrt(MES1)) %峰值信噪比%计算维纳滤波复原后图像的PSNR
MES2=abs(sum(sum((I-I3).^2))/(m*n))
PSNR2=20*log10(MAX/sqrt(MES2))
注:各学院可根据教学需要对以上栏木进行增减。
表格内容可根据内容扩充。
实验四图像增强实验内容:(1)直方图均衡化处理:给定一幅图片,作出均衡化后的直方图,并将原图和均衡化后的图片进行对比。
(2)对一副图像采用多种方法(如均值滤波)实现图像平滑;及采用“原图-低通图像(均值滤波)”、及“原图+高通图像(各种算子)”的方法锐化图像。
实验原理:(1)直方图均衡化是图像增强的重要手段,把输入图像的直方图进行均衡化处理后,可以获得更加清晰的图像。
(2)锐化和平滑是图像增强的重要手段,采用前者可以突出图像的细节,采用平滑可以滤除图像中的噪声,从而达到图像清晰的目的。
实验报告要求:给出实验代码,和实验结果图,并对实验结果进行分析。
所用函数:(1)I mhist函数功能:该函数用于获取图像数据直方图。
调用格式:imhist(I,n)其中,n为指定的灰度级数目,缺省值为256(2)h isteqg=histeq(f,n)对图像f进行均衡化处理,n为输出图像指定的灰度级数,默认值为64;k=histeq(f,p)对图像f进行规定化处理,p为指定的直方图,k为输出图像,其直方图近似于指定的直方图p。
(3)fspecial用于建立预定义的滤波算子,其语法格式为:h = fspecial(type)h = fspecial(type,para)其中type指定算子的类型(可以为'average'——均值滤波,参数为hsize代表模板尺寸,默认值为【3,3】; 'disk'——圆形区域均值滤波,参数为radius代表区域半径,默认值为5;'gaussian'——高斯低通滤波,有两个参数,hsize表示模板尺寸,默认值为【3 3】,sigma为滤波器的标准值,单位为像素,默认值为0.5。
'laplacian'——拉普拉斯算子,参数alpha用于控制算子形状,取值范围为【0,1】,默认值为0.2。
'log'——拉普拉斯高斯算子,有两个参数,hsize表示模板尺寸,默认值为【3 3】,sigma为滤波器的标准差,单位为像素,默认值为0.5。
《数字图像处理》实验教案一、实验目的与要求1. 实验目的(1)理解数字图像处理的基本概念和原理;(2)掌握常用数字图像处理算法和技巧;(3)培养实际操作能力和动手能力,提高解决实际问题的能力。
2. 实验要求(1)熟悉实验环境和相关软件;(2)了解实验原理和流程;二、实验环境与工具1. 实验环境(1)计算机操作系统:Windows 10/Linux/macOS;(2)编程语言:MATLAB/Python/C++等;(3)图像处理软件:Photoshop/OpenCV等。
2. 实验工具(1)编程环境:MATLAB/Python/C++开发工具;(2)图像处理软件:Photoshop/OpenCV;(3)实验教材和参考资料。
三、实验内容与步骤1. 实验一:图像读取与显示(1)打开图像处理软件,导入一幅图像;(2)了解图像的基本信息,如像素大小、分辨率等;(3)将图像显示在界面上,进行观察和分析。
2. 实验二:图像基本运算(1)对图像进行灰度化处理;(2)进行图像的直方图均衡化;(3)实现图像的滤波处理,如高斯滤波、中值滤波等。
3. 实验三:边缘检测(1)实现Sobel边缘检测算法;(2)实现Canny边缘检测算法;(3)分析不同边缘检测算法的效果和特点。
4. 实验四:图像分割(1)利用阈值分割法对图像进行分割;(2)利用区域生长法对图像进行分割;(3)分析不同图像分割算法的效果和特点。
5. 实验五:特征提取与匹配(1)提取图像的关键点,如角点、边缘点等;(2)利用特征匹配算法,如SIFT、SURF等,进行图像配准;(3)分析不同特征提取与匹配算法的效果和特点。
四、实验注意事项1. 严格遵循实验要求和步骤,确保实验的正确性;2. 注意实验环境和工具的使用,防止计算机和设备的损坏;3. 尊重知识产权,不得抄袭和剽窃他人成果;4. 实验过程中遇到问题,应及时请教老师和同学。
五、实验报告要求1. 报告内容:实验目的、实验环境、实验内容、实验步骤、实验结果及分析;2. 报告格式:文字描述清晰,条理分明,公式和图像正确无误;3. 报告篇幅:不少于2000字;4. 提交时间:实验结束后一周内。
《数字图像处理》实验四题目图像分割专业班级学号姓名时间实验报告课程名称数字图像处理实验名称图像分割姓名____________ 学号专业班级____ _实验日期成绩______ _指导教师____ _一、实验目的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中的图像阈值处理操作和命令的使用有了更高的掌握。
实验四图像频域滤波技术实验目的:(1)了解图像增强的目的及意义,加深对图像增强的感性认识,巩固所学的图像增强的理论知识和相关算法。
(2)熟练掌握频域平滑、锐化滤波的实现方法。
实验重点:频域平滑、锐化滤波的实现方法实验难点:频域平滑、锐化滤波的实现方法实验内容:(1)选择一幅图像,利用高斯低通滤波器对此图像进行平滑滤波,观察不同滤波器的截止半径对平滑效果的影响。
f=imread('mohu.jpg');subplot(321);imshow(f,[]);title('原图');F=fftshift(fft2(f,size(f,1),size(f,2)));u=1:size(F,1);v=1:size(F,2);[V,U]=meshgrid(v,u);D=sqrt((U-(floor(size(F,1)/2)+1)).^2+(V-(floor(size(F,2)/2)+1)).^2);H=zeros(size(f));D0=5;H=exp(-D.^2./(2*D0.^2));G=F.*H;G1=ifft2(ifftshift(G));subplot(322);imshow(real(G1),[]);title('半径小于5的高斯低通滤波器');D0=15;H=exp(-D.^2./(2*D0.^2));G=F.*H;G1=ifft2(ifftshift(G));subplot(323);imshow(real(G1),[]);title('半径小于15的高斯低通滤波器');D0=30;H=exp(-D.^2./(2*D0.^2));G=F.*H;G1=ifft2(ifftshift(G));subplot(324);imshow(real(G1),[]);title('半径小于30的高斯低通滤波器');D0=80;H=exp(-D.^2./(2*D0.^2));G=F.*H;G1=ifft2(ifftshift(G));subplot(325);imshow(real(G1),[]);title('半径小于80的高斯低通滤波器');D0=230;H=exp(-D.^2./(2*D0.^2));G=F.*H;G1=ifft2(ifftshift(G));subplot(326);imshow(real(G1),[]);title('半径小于230的高斯低通滤波器');(2)选择一幅边缘较模糊的图像,利用高斯高通滤波器对此图像进行增强滤波,以突出图像中的高频细节信息。
数字图像处理与分析实验报告学院:班级:姓名:学号:实验四图像复原一、实验目的1. 了解图象退化的几种原因2. 掌握对相应退化原因的复原方法二、实验内容1. 使用函数fspecial( )和imfilter( )模拟产生退化图象2. 使用平滑滤波器和维纳滤波器复原图象三、实验步骤1. 加性噪声退化图象(1)先用imnoise( )函数给图象加噪声,如对图象增加高斯白噪声x=imread(‘cameraman.tif’);x=imnoi se(x,’gaussian’)得到图像:(2)使用平滑滤波器对其进行滤波h=fspecial(‘average’)y=imfilter(x,h);得到图像:(3)使用维纳滤波器进行处理w=wiener2(x) %注意:维纳滤波要求为灰度图像!得到图像:2. 使用演示程序比较各种滤波器的效果:nrfiltdemo3.运动退化图像(1)使用fspecial( )和imfilter( )模拟产生运动退化图象相应的程序如下:I = imread('C:\Documents and Settings\Administrator\桌面\1.BMP');figure;imshow(I);title('Original Image');LEN = 31;THETA = 15;PSF = fspecial('motion',LEN,THETA); % create PSFBlurred = imfilter(I,PSF,'circular','conv'); % blur the imagefigure;imshow(Blurred);title('Blurred Image');得到图像:(2)使用维纳滤波器进行处理wnr1=deconvwnr(Blurred,PSF);figure;imshow(wnr1);title('Restored, True PS');四、实验总结本次实验的目的就是了解图像退化的几种原因,比如性噪声,通过对图像添加高斯噪声对图像进行退化,在图像退化以后再对图像进行恢复。
实验四-图像增强信息工程学院实验报告课程名称:数字图像处理班级: 姓名: 学号:一、实验目的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。
实验时间: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、掌握图像分割中几种主要的边缘检测方法(Roberts算子、Sobel算子、Prewitt算子和Laplacian算子)。
2、了解掌握图像的阈值分割算法。
3、掌握图像的区域分割算法。
二、实验要求1. 选择Roberts算子、Sobel算子、Prewitt算子中任意一个,要求算子模板可以选择,实现对良好图像和带噪声的图像的边缘检测,然后把边缘图与原图叠加,分别计算原图与叠加图的信息熵并显示。
2. 实现Laplacian算子。
3. 实现灰度图像和彩色图像的迭代阈值分割算法。
4. 实现对一副图像利用区域生长算法进行图像分割。
提高题:1.实现对读入的一张带人脸的图像,有效分割出人脸区域。
2. 浮雕效果的制作浮雕效果是指物体的轮廓、边缘外貌经过修整形成凸出效果,浮雕类似边缘检测,目的是突出对象的边缘和轮廓。
浮雕效果是实现图像填充色与灰色的转换,用原填充色描画边缘,使图像呈现凸起或凹进效果,出现“浮雕”图案。
浮雕处理可以采用边缘锐化、边缘检测算子检测或其相关类似方法来实现。
如下图:三、实验结果比较比较分析Roberts算子或Sobel算子或Prewitt算子(选择上面实验选做的)和Laplacian算子对不同噪声(高斯噪声和校验噪声)图像的处理结果,并通过上面计算的信息熵,分析信息有什么变化,为什么?。
四、实验体会(包括对于本次实验的小结,实验过程中碰到的问题等)。
数字图像处理实验——图像恢复班级:信息10—1姓名:张慧学号:36实验四、图像复原一、实验目的1了解图像退化原因与复原技术分类化的数学模型;2熟悉图像复原的经典与现代方法;3热练掌握图像复原的应用;4、通过本实验掌握利用MATLAB编程实现数字图像的图像复原。
二、实验原理:图像复原处理是建立在图像退化的数学模型基础上的,这个退化数学模型能够反映图像退化的原因。
图像的退化过程可以理解为施加于原图像上的运算和噪声两者联合作用的结果,图像退化模型如图1所示,可以表示为:g ( x, y ) H [ f ( x, y )] n( x, y ) f ( x, y )h( x, y ) n( x, y) (1)图1 图像退化模型(1)在测试图像上产生高斯噪声lena图-需能指定均值和方差;并用滤波器(自选)恢复图像;噪声是最常见的退化因素之一,也是图像恢复中重点研究的内容,图像中的噪声可定义为图像中不希望有的部分。
噪声是一种随机过程,它的波形和瞬时振幅以及相位都随时间无规则变化,因此无法精确测量,所以不能当做具体的处理对象,而只能用概率统计的理论和方法进行分析和处理。
本文中研究高斯噪声对图像的影响及其去噪过程。
①高斯噪声的产生:所谓高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。
一个高斯随机变量z的PDF可表示为:P(z)()22x pz u2σ-⎡⎤-⎢⎥⎣⎦(2)其中z代表灰度,u是z的均值,σ是z的标准差。
高斯噪声的灰度值多集中在均值附近。
图2 高斯函数可以通过不同的算法用matlab 来产生高斯噪声。
②高斯噪声对信号的影响噪声影响图像处理的输入、采集、处理的各个环节以及输出结果的全过程,在图像中加高斯噪声通常会使图像变得模糊并且会出现细小的斑点,使图像变得不清晰。
③去除高斯噪声的一些方法去除高斯噪声的方法有直方图变换,低通滤波,高通滤波,逆滤波,维纳滤波,中值滤波等。
本文应用高斯平滑滤波进行去噪处理。
数字图像处理及MATLAB实现实验四——图像变换1.图像的傅⾥叶变换⼀(平移性质)傅⾥叶变换的平移性质表明了函数与⼀个指数项相乘等于将变换后的空域中⼼移到新的位置,并且平移不改变频谱的幅值。
I=imread('1.bmp');figure(1)imshow(real(I));I=I(:,:,3);fftI=fft2(I);sfftI=fftshift(fftI); %求离散傅⾥叶频谱%对原始图像进⾏⼆维离散傅⾥叶变换,并将其坐标原点移到频谱图中央位置RRfdp1=real(sfftI);IIfdp1=imag(sfftI);a=sqrt(RRfdp1.^2+IIfdp1.^2);a=(a-min(min(a)))/(max(max(a))-min(min(a)))*225;figure(2)imshow(real(a));I=imread('2.bmp');figure(1)imshow(real(I));I=I(:,:,3);fftI=fft2(I);sfftI=fftshift(fftI); %求离散傅⾥叶频谱%对原始图像进⾏⼆维离散傅⾥叶变换,并将其坐标原点移到频谱图中央位置RRfdp1=real(sfftI);IIfdp1=imag(sfftI);a=sqrt(RRfdp1.^2+IIfdp1.^2);a=(a-min(min(a)))/(max(max(a))-min(min(a)))*225;figure(2)imshow(real(a));I=imread('3.bmp');figure(1)imshow(real(I));I=I(:,:,3);fftI=fft2(I);sfftI=fftshift(fftI); %求离散傅⾥叶频谱%对原始图像进⾏⼆维离散傅⾥叶变换,并将其坐标原点移到频谱图中央位置RRfdp1=real(sfftI);IIfdp1=imag(sfftI);a=sqrt(RRfdp1.^2+IIfdp1.^2);a=(a-min(min(a)))/(max(max(a))-min(min(a)))*225;figure(2)imshow(real(a));实验结果符合傅⾥叶变换平移性质2.图像的傅⾥叶变换⼆(旋转性质)%构造原始图像I=zeros(256,256);I(88:168,124:132)=1; %图像范围是256*256,前⼀值是纵向⽐,后⼀值是横向⽐imshow(I)%求原始图像的傅⾥叶频谱J=fft2(I);F=abs(J);J1=fftshift(F);figureimshow(J1,[550])%对原始图像进⾏旋转J=imrotate(I,90,'bilinear','crop');figureimshow(J)%求旋转后图像的傅⾥叶频谱J=fft2(I);F=abs(J);J2=fftshift(F);figureimshow(J2,[550])3.图像的离散余弦变换⼀%对cameraman.tif⽂件计算⼆维DCT变换RGB=imread('cameraman.tif');figure(1)imshow(RGB)I=rgb2gray(RGB);%真彩⾊图像转换成灰度图像J=dct2(I);%计算⼆维DCT变换figure(2)imshow(log(abs(J)),[])%图像⼤部分能量集中在左上⾓处figure(3);J(abs(J)<10)=0;%把变换矩阵中⼩于10的值置换为0,然后⽤idct2重构图像K=idct2(J)/255;imshow(K)4.图像的离散余弦变换⼆% I=imread('1.bmp');% figure(1)% imshow(real(I));% I=I(:,:,3);% fftI=fft2(I);% sfftI=fftshift(fftI); %求离散傅⾥叶频谱% %对原始图像进⾏⼆维离散傅⾥叶变换,并将其坐标原点移到频谱图中央位置% RRfdp1=real(sfftI);% IIfdp1=imag(sfftI);% a=sqrt(RRfdp1.^2+IIfdp1.^2);% a=(a-min(min(a)))/(max(max(a))-min(min(a)))*225;% figure(2)% imshow(real(a));% I=imread('2.bmp');% figure(1)% imshow(real(I));% I=I(:,:,3);% fftI=fft2(I);% sfftI=fftshift(fftI); %求离散傅⾥叶频谱% %对原始图像进⾏⼆维离散傅⾥叶变换,并将其坐标原点移到频谱图中央位置% RRfdp1=real(sfftI);% IIfdp1=imag(sfftI);% a=sqrt(RRfdp1.^2+IIfdp1.^2);% a=(a-min(min(a)))/(max(max(a))-min(min(a)))*225;% figure(2)% imshow(real(a));% I=imread('3.bmp');% figure(1)% imshow(real(I));% I=I(:,:,3);% fftI=fft2(I);% sfftI=fftshift(fftI); %求离散傅⾥叶频谱% %对原始图像进⾏⼆维离散傅⾥叶变换,并将其坐标原点移到频谱图中央位置% RRfdp1=real(sfftI);% IIfdp1=imag(sfftI);% a=sqrt(RRfdp1.^2+IIfdp1.^2);% a=(a-min(min(a)))/(max(max(a))-min(min(a)))*225;% figure(2)% imshow(real(a));% %构造原始图像% I=zeros(256,256);% I(88:168,124:132)=1; %图像范围是256*256,前⼀值是纵向⽐,后⼀值是横向⽐% imshow(I)% %求原始图像的傅⾥叶频谱% J=fft2(I);% F=abs(J);% J1=fftshift(F);figure% imshow(J1,[550])% %对原始图像进⾏旋转% J=imrotate(I,90,'bilinear','crop');% figure% imshow(J)% %求旋转后图像的傅⾥叶频谱% J=fft2(I);% F=abs(J);% J2=fftshift(F);figure% imshow(J2,[550])% %对cameraman.tif⽂件计算⼆维DCT变换% RGB=imread('cameraman.tif');% figure(1)% imshow(RGB)% I=rgb2gray(RGB);% %真彩⾊图像转换成灰度图像% J=dct2(I);% %计算⼆维DCT变换% figure(2)% imshow(log(abs(J)),[])% %图像⼤部分能量集中在左上⾓处% figure(3);% J(abs(J)<10)=0;% %把变换矩阵中⼩于10的值置换为0,然后⽤idct2重构图像% K=idct2(J)/255;% imshow(K)RGB=imread('cameraman.tif');I=rgb2gray(RGB);I=im2double(I); %转换图像矩阵为双精度型T=dctmtx(8); %产⽣⼆维DCT变换矩阵%矩阵T及其转置T'是DCT函数P1*X*P2的参数B=blkproc(I,[88],'P1*x*P2',T,T');maxk1=[ 1111000011100000110000001000000000000000000000000000000000000000 ]; %⼆值掩模,⽤来压缩DCT系数B2=blkproc(B,[88],'P1.*x',mask1); %只保留DCT变换的10个系数I2=blkproc(B2,[88],'P1*x*P2',T',T); %重构图像figure,imshow(T);figure,imshow(B2);figure,imshow(I2);RGB=imread('cameraman.tif');I=rgb2gray(RGB);I=im2double(I); %转换图像矩阵为双精度型T=dctmtx(8); %产⽣⼆维DCT变换矩阵%矩阵T及其转置T'是DCT函数P1*X*P2的参数B=blkproc(I,[88],'P1*x*P2',T,T');maxk1=[ 1111000011100000100000000000000000000000000000000000000000000000 ]; %⼆值掩模,⽤来压缩DCT系数B2=blkproc(B,[88],'P1.*x',mask1); %只保留DCT变换的10个系数I2=blkproc(B2,[88],'P1*x*P2',T',T); %重构图像figure,imshow(T);figure,imshow(B2);figure,imshow(I2);5.图像的哈达玛变换cr=0.5;I=imread('cameraman.tif');I=im2double(I)/255; %将读⼊的unit8类型的RGB图像I转换为double类型的数据figure(1),imshow(I);%显⽰%求图像⼤⼩[m_I,n_I]=size(I); %提取矩阵I的⾏列数,m_I为I的⾏数,n_I为I的列数sizi=8;snum=64;%分块处理t=hadamard(sizi) %⽣成8*8的哈达码矩阵hdcoe=blkproc(I,[sizi sizi],'P1*x*P2',t,t');%将图⽚分成8*8像素块进⾏哈达码变换%重新排列系数CE=im2col(hdcoe,[sizi,sizi],'distinct');%将矩阵hdcode分为8*8互不重叠的⼦矩阵,再将每个⼦矩阵作为CE的⼀列[Y Ind]=sort(CE); %对CE进⾏升序排序%舍去⽅差较⼩的系数,保留原系数的⼆分之⼀,即32个系数[m,n]=size(CE);%提取矩阵CE的⾏列数,m为CE的⾏数,n为CE的列数snum=snum-snum*cr;for i=1:nCE(Ind(1:snum),i)=0;end%重建图像re_hdcoe=col2im(CE,[sizi,sizi],[m_I,n_I],'distinct');%将矩阵的列重新组织到块中re_I=blkproc(re_hdcoe,[sizi sizi],'P1*x*P2',t',t);%进⾏反哈达码变换,得到压缩后的图像re_I=double(re_I)/64; %转换为double类型的数据figure(2);imshow(re_I);%计算原始图像和压缩后图像的误差error=I.^2-re_I.^2;MSE=sum(error(:))/prod(size(re_I));。
数字图像处理实验指导书目录实验一MATLAB数字图像处理初步实验二图像的代数运算实验三图像增强-空间滤波实验四图像分割实验五形态学运算3实验一 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]。
实验一常用MATLAB图像处理命令一、实验目得1、熟悉并掌握MATLAB工具得使用;2、实现图像得读取、显示、代数运算与简单变换。
二、实验环境MATLAB 6。
5以上版本、WIN XP或WIN2000计算机三、常用函数●读写图像文件1 imreadimread函数用于读入各种图像文件,如:a=imread('e:\w01。
tif')2 imwriteimwrite函数用于写入图像文件,如:imwrite(a,’e:\w02。
tif’,’tif')3imfinfoimfinfo函数用于读取图像文件得有关信息,如:imfinfo('e:\w01、tif’)●图像得显示1imageimage函数就是MATLAB提供得最原始得图像显示函数,如:a=[1,2,3,4;4,5,6,7;8,9,10,11,12];image(a);2 imshowimshow函数用于图像文件得显示,如:i=imread('e:\w01、tif');imshow(i);title(‘原图像’)%加上图像标题3 colorbarcolorbar函数用显示图像得颜色条,如:i=imread(’e:\w01。
tif');imshow(i);colorbar;4 figurefigure函数用于设定图像显示窗口,如:figure(1); /figure(2);5 subplot把图形窗口分成多个矩形部分,每个部分可以分别用来进行显示、Subplot(m,n,p)分成m*n个小窗口,在第p个窗口中创建坐标轴为当前坐标轴,用于显示图形、6 plot绘制二维图形plot(y)Plot(x,y)xy可以就是向量、矩阵。
图像类型转换1rgb2gray把真彩图像转换为灰度图像i=rgb2gray(j)2 im2bw通过阈值化方法把图像转换为二值图像I=im2bw(j,level)Level表示灰度阈值,取值范围0~1(即0.n),表示阈值取自原图像灰度范围得n%3 imresize改变图像得大小I=imresize(j,[m n])将图像j大小调整为m行n列图像运算1imadd两幅图像相加,要求同样大小,同种数据类型Z=imadd(x,y)表示图像x+y2 imsubstract两幅图像相减,要求同样大小,同种数据类型Z=imsubtract(x,y) 表示图像x-y3 immultiplyZ=immultiply(x,y) 表示图像x*y4 imdivideZ=imdivide(x,y) 表示图像x/y四、实验内容(请将实验程序填写在下方合适得位置,实验图像结果拷屏粘贴)1、读入一幅RGB图像,变换为灰度图像与二值图像,并在同一个窗口内分成三个子窗口来分别显示RGB图像与灰度图像,注上文字标题。
数字图像处理实验指导书电气信息工程系实验中心2008年8月目 录实验一、数字图像获取实验二、图像的傅立叶变换实验三、图像增强实验四、图像压缩实验一、数字图像获取一、实验目的1.掌握使用扫描仪等数字化设备以及计算机获取数字图像的方法;2.修改图像的存储格式。
二、实验仪器1.计算机;2.扫描仪(或数码相机、数字摄像机)及其驱动程序盘;3.图像处理软件(画图,photoshop, Microsoft photo edit等);4.记录用的笔、纸。
三、 实验内容用扫描仪获取图像也是图像的数字化过程的方法之一,扫描仪按种类可以分为手持扫描仪,台式扫描仪和滚筒式扫描仪(鼓形扫描仪)。
扫描仪的主要性能指标有x、y方向的分辨率、色彩分辨率(色彩位数)、扫描幅面和接口方式等。
各类扫描仪都标明了它的光学分辨率和最大分辨率。
分辨率的单位是dpi,dpi是英文Dot Per Inch的缩写,意思是每英寸的像素点数。
扫描仪工作时,首先由光源将光线照在欲输入的图稿上,产生表示图像特征的反射光(反射稿)或透射光(透射稿)。
光学系统采集这些光线,将其聚焦在CCD上,由CCD将光信号转换为电信号,然后由电路部分对这些信号进行A/D转换及处理,产生对应的数字信号输送给计算机。
当机械传动机构在控制电路的控制下,带动装有光学系统和CCD的扫描头与图稿进行相对运动,将图稿全部扫描一遍,一幅完整的图像就输入到计算机中去了。
图1.1扫描仪的工作原理扫描仪扫描图像的步骤是:首先将欲扫描的原稿正面朝下铺在扫描仪的玻璃板上,原稿可以是文字稿件或者图纸照片;然后启动扫描仪驱动程序后,安装在扫描仪内部的可移动光源开始扫描原稿。
为了均匀照亮稿件,扫描仪光源为长条形,并沿y方向扫过整个原稿;照射到原稿上的光线经反射后穿过一个很窄的缝隙,形成沿x方向的光带,又经过一组反光镜,由光学透镜聚焦并进入分光镜,经过棱镜和红绿蓝三色滤色镜得到的RGB三条彩色光带分别照到各自的CCD上,CCD将RGB光带转变为模拟电子信号,此信号又被A/D变换器转变为数字电子信号。
数字图像处理实验四图像复原一、实验目的了解matlab有关图像复原的操作,如图像的读写,显示,加噪声,去噪声等。
二、实验要求1、使用不同模糊化方法对图像Lena进行模糊处理,对原图像及模糊化图像进行比较(注明模糊化的类型),并保存模糊图像。
(此题中所用的图像和保存的图像在Images文件夹中)I = imread('lena.tif'); %读入图像subplot(221);imshow(I);title('原始图像');H=fspecial('motion',30,45); %运动模糊PSFMotionBlur=imfilter(I,H); %卷积imwrite(MotionBlur,'运动模糊.tif'); %保存运动模糊图像subplot(222);imshow(MotionBlur);title('运动模糊图像');H=fspecial('disk',10); %圆盘状模糊PSFbulrred=imfilter(I,H);imwrite(bulrred,'圆盘状模糊.tif'); %保存圆盘状模糊图像subplot(223);imshow(bulrred);title('圆盘状模糊图像');H=fspecial('unsharp'); %钝化模糊PSFSharpened=imfilter(I,H);imwrite(Sharpened,'钝化模糊.tif'); %保存钝化模糊图像subplot(224);imshow(Sharpened);title('钝化模糊图像');原始图像运动模糊图像圆盘状模糊图像钝化模糊图像2、对图像Lena添加不同类型的噪声,对原图像及噪声图像进行比较(注明加入噪声的类型,及噪声参数),并保存噪声图像。
江 西 理 工 大 学江 西 理 工 大 学 实 验 报 告 纸第 1 页/共 4页一、实验目的掌握哈夫曼编码算法的基本原理;要求对屏幕输入的信符概率向量进行哈夫曼编码。
二、实验内容对屏幕输入的信符概率向量例如‘[0.4 0.2 0.16 0.12 0.06 0.04 0.02]’进行哈夫曼编码,计算计算信源的熵,哈夫曼编码的平均码字长及其编码效率,显示哈夫曼编码与相应计算结果.三、实验步骤和设计思想通过哈夫曼编码来计算信源的熵,用Matlab 来模拟算法的过程。
霍夫曼编码的步骤:1)根据待编码的符号串,统计各个符号的概率;2)根据符号的概率统计特征,构建霍夫曼编码表,即计算每个符号的编码结果; 3)用得到的编码表对符号序列进行编码。
四、程序清单clcclear allp=input('请输入信符的概率向量:'); n=length(p); q=p;a=zeros(n-1,n); for i=1:n-1fprintf('第%d 次排序\n',i); [q,l]=sort(q) %qa(i,:)=[l(1:n-i+1),zeros(1,i-1)]fprintf('\n 第%d 次排序后合并生成的数据',i);q=[q(1)+q(2),q(3:n),1] endfor i=1:n-1c(i,1:n*n)=blanks(n*n); endc(n-1,n)='1'; c(n-1,2*n)='0'; for i=2:n-1c(n-i,1:n-1)=c(n-i+1,n*(find(a(n-i+1,:)==1))-(n-2):n*(find(a(n-i+1,:)==1))) c(n-i,n)='1';c(n-i,n+1:2*n-1)=c(n-i,1:n-1); c(n-i,2*n)='0';for j=1:i-1c(n-i,(j+1)*n+1:(j+2)*n)=c(n-i+1,n*(find(a(n-i+1,:)==j+1)-1)+1:n*(find(a(n-i+1,:)==j+1))) end end for i=1:nh(i,1:n)=c(1,n*(find(a(1,:)==i)-1)+1:find(a(1,:)==i)*n); ll(i)=length(find(abs(h(i,:)~=32))); endLavg=sum(p.*ll)fprintf('\n huffman code:\n'); hHA=(-1) * sum(p.*log2(p));fprintf('\n huffman effciency:\n'); t=HA/Lavg五、实验调试记录六、实验结果及其分析请输入信符的概率向量:[0.4 0.2 0.16 0.12 0.06 0.04 0.02] 第1次排序q = 0.0200 0.0400 0.0600 0.1200 0.1600 0.2000 0.4000 l = 7 6 5 4 3 2 1 a = 7 6 5 4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0数字图像处理 实验报告姓名: 江 西 理 工 大 学 实 验 报 告 纸第 2 页/共 4页0 0 0 0 0 0 0 0 0 0 0 0 0 0第1次排序后合并生成的数据 q =0.0600 0.0600 0.1200 0.1600 0.2000 0.4000 1.0000 第2次排序 q =Columns 1 through 60.0600 0.0600 0.1200 0.1600 0.2000 0.4000 Column 7 1.0000 l =1 2 3 4 5 6 7 a =7 6 5 4 3 2 1 1 2 3 4 5 6 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 第2次排序后合并生成的数据 q =Columns 1 through 60.1200 0.1200 0.1600 0.2000 0.4000 1.0000 Column 7 1.0000 第3次排序 q =Columns 1 through 60.1200 0.1200 0.1600 0.2000 0.4000 1.0000 Column 7 1.0000 l =1 2 3 4 5 6 7 a =7 6 5 4 3 2 1 1 2 3 4 5 6 0 1 2 3 4 5 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0第3次排序后合并生成的数据 q =Columns 1 through 60.2400 0.1600 0.2000 0.4000 1.0000 1.0000 Column 7 1.0000第4次排序q =Columns 1 through 60.1600 0.2000 0.2400 0.4000 1.0000 1.0000 Column 7 1.0000l = 2 3 1 4 5 6 7 a = 7 6 5 4 3 2 1 1 2 3 4 5 6 0 1 2 3 4 5 0 0 2 3 1 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0第4次排序后合并生成的数据 q =Columns 1 through 60.3600 0.2400 0.4000 1.0000 1.0000 1.0000 Column 7 1.0000第5次排序q = Columns 1 through 60.2400 0.3600 0.4000 1.0000 1.0000 1.0000 Column 7 1.0000l = 2 1 3 4 5 6 7 a = 7 6 5 4 3 2 1 1 2 3 4 5 6 0 1 2 3 4 5 0 0 2 3 1 4 0 0 0 2 1 3 0 0 0 0 0 0 0 0 0 0 0 第5次排序后合并生成的数据 q =Columns 1 through 60.6000 0.4000 1.0000 1.0000 1.0000 1.0000姓名: 江 西 理 工 大 学 实 验 报 告 纸第 3 页/共 4页Column 7 1.0000第6次排序q =Columns 1 through 60.4000 0.6000 1.0000 1.0000 1.0000 1.0000 Column 7 1.0000l = 2 1 3 4 5 6 7 a = 7 6 5 4 3 2 1 1 2 3 4 5 6 0 1 2 3 4 5 0 0 2 3 1 4 0 0 0 2 1 3 0 0 0 0 2 1 0 0 0 0 0第6次排序后合并生成的数据q = 1 1 1 1 1 1 1c = 0 1 0 c = 01 00 1 1 0 c = 00 01 00 1 1 0 c = 001 000 01 01 00 1 1 0 c = 001 000 01 1 01 00 1 1 0 c = 01 001 000 01 1 01 00 1 1 0 c = 011 010 001 001 000 01 1 01 00 1 1 0 c = 011 010 001 000 001 000 01 1 01 00 1 1 0 c = 011 010 001 000 1 001 000 01 1 01 00 1 1 0 c = 011 011 010 001 000 1 001 000 01 1 01 00 1 1 0 c = 0111 0110 010 011 010 001 000 1 001 000 01 1 01 00 1 1 0 c = 0111 0110 010 001 011 010 001 000 1 001 000 01 1 01 00 1 1 0 c = 0111 0110 010 001 000 011 010 001 000 1 001 000 01 1 01 00 1 1 0 c = 0111 0110 010 001 000 1 011 010 001 000 1 001 000 01 1 01 00 1 1 0 c =0111 0111 0110 010 001 000 1 011 010 001 000 1 001 000 01 1 01 00 1 1 0 c =01111 01110 0110 0111 0110 010 001 000 1姓名: 江西理工大学实验报告纸011 010 001 000 1001 000 01 101 00 11 0c = 01111 01110 0110 0100111 0110 010 001 000 1011 010 001 000 1001 000 01 101 00 11 0c =01111 01110 0110 010 0010111 0110 010 001 000 1011 010 001 000 1001 000 01 101 00 11 0c = 01111 01110 0110 010 001 0000111 0110 010 001 000 1011 010 001 000 1001 000 01 101 00 11 0c = 01111 01110 0110 010 001 000 10111 0110 010 001 000 1011 010 001 000 1001 000 01 101 00 11 0七、实验心得通过做这次实验掌握了哈夫曼编码的基本理论和算法流程;掌握了编程实现图像的哈夫曼编码算法。
数字图像处理
实验
实验四:图像增强—直方图变换学院:信息工程学院
姓名:
学号:
专业及班级:
指导教师:
一、实验目的
1.掌握灰度直方图的概念及其计算方法;
2.熟练掌握直力图均衡化和直方图规定化的计算过程;
3.熟练掌握空域滤波中常用的平滑和锐化滤波器;
4.掌握色彩直方图的概念和计算方法;
5.利用MATLAB程序进行图像增强。
二、实验内容
图像增强是指按特定的需要突出一幅图像中的某些信息,同时,消弱或去除某些不需要的信息的处理方法。
其主要目的是处理后的图像对某些特定的应用比原来的图像更加有效。
图像增强技术主要有直方图修改处理、图像平滑化处理、图像尖锐化处理和彩色处理技术等。
本实验以直方图均衡化增强图像对比度的方法为主要内容,其他方法同学们可以在课后自行联系。
直方图是多种空间城处理技术的基础。
直方图操作能有效地用于图像增强。
除了提供有用的图像统计资料外,直方图固有的信息在其他图像处理应用中也是非常有用的,如图像压缩与分割。
直方图在软件中易于计算,也适用于商用硬件设备,因此,它们成为了实时图像处理的一个流行工具。
直方图是图像的最基本的统计特征,它反映的是图像的灰度值的分布情况。
直方图均衡化的目的是使图像在整个灰度值动态变化范围内的分布均匀化,改善图像的亮度分布状态,增强图像的视觉效果。
灰度直方图是图像预处理中涉及最广泛的基本概念之一。
图像的直方图事实上就是图像的亮度分布的概率密度函数,是一幅图像的所有象素集合的最基本的统计规律。
直方图反映了图像的明暗分布规律,可以通过图像变换进行直方图调整,获得较好的视觉效果。
直方图均衡化是通过灰度变换将一幅图像转换为另一幅具有均衡直方图,即在每个灰度级上都具有相同的象素点数的过程。
三、实验具体实现
显示原图像的直方图和经过均衡化处理过的图像直方图:
I=imread('1.jpg'); % 读入原图像
J=histeq(I); %对原图像进行直方图均衡化处理
subplot(2,2,1) ;imshow(I); %显示原图像
title('原图像'); %给原图像加标题名
%对原图像进行屏幕控制;显示直方图均衡化后的图像
subplot(2,2,2) ;imshow(J);
%给直方图均衡化后的图像加标题名
title('直方图均衡化后的图像') ;
%对直方图均衡化后图像进行屏幕控制;作一幅子图,并排两幅图的第1幅
subplot(2,2,3) ;
imhist(I,64); %将原图像直方图显示为64级灰度
title('原图像直方图') ; %给原图像直方图加标题名
subplot(2,2,4); %作第2幅子图
imhist(J,64) ; %将均衡化后图像的直方图显示为64级灰度
title('均衡变换后的直方图') ; %给均衡化后图像直方图加标题名
四、思考题
1.直方图是什么概念?它反映了图像的什么信息?
直方图表示数字图像中每一灰度级与其出现频数(该灰度像素的数目)间的统计关系,用横坐标表示灰度级,纵坐标表示其频数(也有用相对频数即概率表示的),即指图像中各种不同灰度级像素出现的相对频率。
灰度直方图描述了图像的概貌,如灰度范围、灰度级分布、整幅图像的平均亮度等。
2.直方图均衡化是什么意思?它的主要用途是什么?
直方图均衡化也叫做直方图均匀化,是一种灰度增强算法,通过对原图像进行某种变换,使得图像的直方图变为均匀分布的直方图,直方图变换后可使图像的灰度间距拉开或使灰度分布均匀,从而增大对比度,使图像细节清晰,达到增强的目的,以改善图像的视
觉效果。
主要用于图像的增强,使图像变得清晰,如在医学上的X光,核磁共振成像等。
五、实验小结。