数字图像处理教程(matlab版)
第5章 图像变换技术 MATLAB 数字图像处理课件
5.6.2 Hough变换的MATLAB实现
hough函数用于实现Hough变换。其调用格式为: (1)[H, theta, rho]=hough(BW) (2)[H, theta, rho]=hough(BW, param1,
val1, param2, val2)
【例5-15】用hough函数检测图像中的直线。
(2)B = idct2(A,m,n)或B = idct2(A,[m n]):在对图 像A进行二维离散余弦逆变换前,先将图像A补零到m×n。 如果m和n比图像A的尺寸小,则在进行变换前,将图像A进 行剪切。
【例5-9】对图像进行二维离散余弦逆变换。
(a)原始图像
(b)逆DCT变换
3.dctmtx函数 在MATLAB图像处理工具箱中提供了dctmtx函数用
于计算二维离散DCT矩阵。 其调用格式为:D = dctmtx(n)。
返回n×n的DCT变换矩阵,如果矩阵A的大小为 n×n,D*A为A矩阵每一列的DCT变换值,A*D'为A 每一列的DCT变换值的转置(当A为n×n的方阵) 。
【例5-10】计算二维离散DCT矩阵。
(a)原始图像
(b)离散DCT矩阵
5.4 离散余弦变换
5.4.1 一维离散余弦变换 5.4.2 二维离散余弦变换 5.4.3 快速离散余弦变换
5.4.4 离散余弦变换的MATLAB实现
1.dct2函数 在MATLAB图像处理工具箱中提供了dct2函数用于实现二维
离散余弦变换。该函数常用于图像压缩,最常见的便是用 于JPEG图像压缩。其调用格式为: (1)B = dct2(A):返回图像A的二维离散余弦变换值,其 大小与A相同,且各元素为离散余弦变换的系数B(k1,k2)。 (2)B = dct2(A,m,n)或B = dct2(A,[m n]):在对图像A 进行二维离散余弦变换前,先将图像A补零到m×n。如果m 和n比图像A的尺寸小,则在进行变换前,将图像A进行剪切 。
MATLAB数字图像处理中的指令用法
• • • • • •
imshow(BW)显示一张二值图像BW imshow(X,map)用指定的调色板来显示图像 imshow(RGB)显示一张真彩色图像RGB imshow(...,display_option) imshow(x,y,A,...) imshow filename
• • • •
• • • • •
13.meshgrid
• • • • • • • • • • • • • • 函数功能生成绘制3-D图形所需的网格数据。在计算机中进行绘图操作时, 往 往需要一些采样点,然后根据这些采样点来绘制出整个图形。在进行3-D绘图 操作时,涉及到x、y、z三组数据,而x、y这两组数据可以看做是在Oxy平面 内对坐标进行采样得到的坐标对(x, y)。 例如:画一个128*128,截止频率为15的理想滤波器 for u=1:128 for v=1:128 if sqrt((u-64)^2+(v-64)^2)<=15 H(u,v)=1; else H(u,v)=0; end end end imshow(H); [u,v]=freqspace(128,'meshgrid'); figure,mesh(u,v,H)
• matlab中,每个figure都有(而且仅有)一个colormap,翻 译过来就是色图。 • COLORMAP(MAP) 用MAP矩阵映射当前图形的色图。 • COLORMAP('default') 默认的设置是 JET. • MAP = COLORMAP 获得当前色图矩阵. • COLORMAP(AX,...) 应用色图到AX坐标对应的图形,而非当 前图形. • MAP实际上是一个mx3的矩阵,每一行的3个值都为0-1之 间数,分别代表颜色组成的rgb值,[1 0 0] 代表红色,[0 1 0]代表绿色,[0 0 1]代表蓝色。系统自带了一些colormap, 如:winter、autumn等。输入winter,就可以看到它是一 个64x3的矩阵。用户可以自定义自己的colormap,而且不 一定是64维的。
用matlab实现数字图像处理几个简单例子
实验报告实验一图像的傅里叶变换(旋转性质)实验二图像的代数运算实验三filter2实现均值滤波实验四图像的缩放朱锦璐04085122实验一图像的傅里叶变换(旋转性质)一、实验内容对图(1.1)的图像做旋转,观察原图的傅里叶频谱和旋转后的傅里叶频谱的对应关系。
图(1.1)二、实验原理首先借助极坐标变换x=rcosθ,y=rsinθ,u=wcosϕ,v=wsinϕ,,将f(x,y)和F(u,v)转换为f(r,θ)和F(w,ϕ).f(x,y) <=> F(u,v)f(rcosθ,rsinθ)<=> F(wcosϕ,wsinϕ)经过变换得f( r,θ+θ。
)<=>F(w,ϕ+θ。
)上式表明,对f(x,y)旋转一个角度θ。
对应于将其傅里叶变换F(u,v)也旋转相同的角度θ。
F(u,v)到f(x,y)也是一样。
三、实验方法及程序选取一幅图像,进行离散傅里叶变换,在对其进行一定角度的旋转,进行离散傅里叶变换。
>> I=zeros(256,256); %构造原始图像I(88:168,120:136)=1; %图像范围256*256,前一值是纵向比,后一值是横向比figure(1);imshow(I); %求原始图像的傅里叶频谱J=fft2(I);F=abs(J);J1=fftshift(F);figure(2)imshow(J1,[5 50])J=imrotate(I,45,'bilinear','crop'); %将图像逆时针旋转45°figure(3);imshow(J) %求旋转后的图像的傅里叶频谱J1=fft2(J);F=abs(J1);J2=fftshift(F);figure(4)imshow(J2,[5 50])四、实验结果与分析实验结果如下图所示(1.2)原图像(1.3)傅里叶频谱(1.4)旋转45°后的图像(1.5)旋转后的傅里叶频谱以下为放大的图(1.6)原图像(1.7)傅里叶频谱(1.8)旋转45°后的图像(1.9)旋转后的傅里叶频谱由实验结果可知1、从旋转性质来考虑,图(1.8)是图(1.6)逆时针旋转45°后的图像,对比图(1.7)和图(1.9)可知,频域图像也逆时针旋转了45°2、从尺寸变换性质来考虑,如图(1.6)和图(1.7)、图(1.8)和图(1.9)可知,原图像和其傅里叶变换后的图像角度相差90°,由此可知,时域中的信号被压缩,到频域中的信号就被拉伸。
数字图像处理与应用(MATLAB版)课后题答案
第一章1. 什么是图像?如何区分数字图像和模拟图像?模拟图像和数字图像如何相互转换?答:图像是当光辐射能量照在物体上,经过反射或透射,或由发光物体本身发出的光能量,在人的视觉器官中所重现出的物体的视觉信息。
数字图像将图像看成是许多大小相同、形状一致的像素组成。
这样,数字图像可以用二维矩阵表示。
将自然界的图像通过光学系统成像并由电子器件或系统转化为模拟图像(连续图像)信号,再由模拟/数字转化器(ADC)得到原始的数字图像信号。
图像的数字化包括离散和量化两个主要步骤。
在空间将连续坐标过程称为离散化,而进一步将图像的幅度值(可能是灰度或色彩)整数化的过程称为量化。
2. 什么是数字图像处理?答:数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。
3. 数字图像处理系统有哪几部分组成?各部分的主要功能和常见设备有哪些?答:一个基本的数字图像处理系统由图像输入、图像存储、图像输出、图像通信、图像处理和分析5个模块组成,如下图所示。
各个模块的作用分别为:图像输入模块:图像输入也称图像采集或图像数字化,它是利用图像采集设备(如数码照相机、数码摄像机等)来获取数字图像,或通过数字化设备(如图像扫描仪)将要处理的连续图像转换成适于计算机处理的数字图像。
图像存储模块:主要用来存储图像信息。
图像输出模块:将处理前后的图像显示出来或将处理结果永久保存。
图像通信模块:对图像信息进行传输或通信。
图像处理与分析模块:数字图像处理与分析模块包括处理算法、实现软件和数字计算机,以完成图像信息处理的所有功能。
4. 试述人眼的主要特性。
答:(1)、人眼的视觉机理。
视网膜上有大量的杆状细胞和锥状细胞,锥状细胞能辨别光的颜色,而杆状细胞感光灵敏度高,但不能辨色。
(2)、人眼的视敏特性。
指人眼对不同波长的光具有不同的敏感程度。
(3)、人眼的亮度感觉。
亮度感觉范围指人眼所能感觉到的最大亮度与最小亮度之间的范围。
数字图像处理及matlab实现源代码【1】
% *-*--*-*-*-*-*-*-*-*-*-*-*图像处理*-*-*-*-*-*-*-*-*-*-*-*%{% (一)图像文件的读/写A=imread('drum.jpg'); % 读入图像imshow(A); % 显示图像imwrite(A,'drum.jpg');info=imfinfo('drum.jpg') % 查询图像文件信息% 用colorbar函数将颜色条添加到坐标轴对象中RGB=imread('drum.jpg');I=rgb2gray(RGB); % 把RGB图像转换成灰度图像h=[1 2 1;0 0 0;-1 -2 -1];I2=filter2(h,I);imshow(I2,[]);colorbar('vert') % 将颜色条添加到坐标轴对象中% wrap函数将图像作为纹理进行映射A=imread('4.jpg');imshow(A);I=rgb2gray(RGB);[x,y,z]=sphere;warp(x,y,z,I); % 用warp函数将图像作为纹理进行映射%}% subimage函数实现一个图形窗口中显示多幅图像RGB=imread('drum.jpg');I=rgb2gray(RGB);subplot(1,2,1);subimage(RGB); % subimage函数实现一个图形窗口中显示多幅图像subplot(1,2,2),subimage(I);% *-*--*-*-*-*-*-*-*-*-*-*-*图像处理*-*-*-*-*-*-*-*-*-*-*-*% (二)图像处理的基本操作% ----------------图像代数运算------------------%{% imadd函数实现两幅图像的相加或给一幅图像加上一个常数% 给图像每个像素都增加亮度I=imread('4.jpg');J=imadd(I,100); % 给图像增加亮度subplot(1,2,1),imshow(I);title('原图');subplot(1,2,2),imshow(J);title('增加亮度图');%% imsubtract函数实现将一幅图像从另一个图像中减去或减去一个常数I=imread('drum.jpg');J=imsubtract(I,100); % 给图像减去亮度subplot(1,2,1),imshow(I);%% immultiply实现两幅图像的相乘或者一幅图像的亮度缩放I=imread('drum.jpg');J=immultiply(I,2); % 进行亮度缩放subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J);%% imdivide函数实现两幅图像的除法或一幅图像的亮度缩放I=imread('4.jpg');J=imdivide(I,0.5); % 图像的亮度缩放subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J);%}% ----------------图像的空间域操作------------------%{% imresize函数实现图像的缩放J=imread('4.jpg');subplot(1,2,1),imshow(J);title('原图');X1=imresize(J,0.2); % 对图像进行缩放subplot(1,2,2),imshow(X1);title('缩放图');%% imrotate函数实现图像的旋转I=imread('drum.jpg');J=imrotate(I,50,'bilinear'); % 对图像进行旋转subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J);%% imcrop函数实现图像的剪切I=imread('drum.jpg');I2=imcrop(I,[1 100 130 112]); % 对图像进行剪切subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(I2);%}% ----------------特定区域处理------------------%{% roipoly函数用于选择图像中的多边形区域I=imread('4.jpg');c=[200 250 278 248 199 172];r=[21 21 75 121 121 75];BW=roipoly(I,c,r); % roipoly函数选择图像中的多边形区域subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(BW);%% roicolor函数式对RGB图像和灰度图像实现按灰度或亮度值选择区域进行处理a=imread('4.jpg');subplot(2,2,1),imshow(a);I=rgb2gray(a);BW=roicolor(I,128,225); % 按灰度值选择的区域subplot(2,2,4),imshow(BW);%% ploy2mask 函数转化指定的多边形区域为二值掩模x=[63 186 54 190 63];y=[60 60 209 204 601];bw=poly2mask(x,y,256,256); % 转化指定的多边形区域为二值掩模imshow(bw);hold onplot(x,y,'r','LineWidth',2);hold off%% roifilt2函数实现区域滤波a=imread('4.jpg');I=rgb2gray(a);c=[200 250 278 248 199 172];r=[21 21 75 121 121 75];BW=roipoly(I,c,r); % roipoly函数选择图像中的多边形区域h=fspecial('unsharp');J=roifilt2(h,I,BW); % 区域滤波subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J);%% roifill函数实现对特定区域进行填充a=imread('4.jpg');I=rgb2gray(a);c=[200 250 278 248 199 172];r=[21 21 75 121 121 75];J=roifill(I,c,r); % 对特定区域进行填充subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J);%}% ----------------图像变换------------------%{% fft2 和ifft2函数分别是计算二维的快速傅里叶变换和反变换f=zeros(100,100);subplot(1,2,1);imshow(f);f(20:70,40:60)=1;subplot(1,2,2);imshow(f);F=fft2(f); % 计算二维的快速傅里叶变换F2=log(abs(F));% 对幅值对对数figure;subplot(1,2,1),imshow(F),colorbar;subplot(1,2,2),imshow(F2),colorbar;%% fftsshift 函数实现了补零操作和改变图像显示象限f=zeros(100,100);subplot(2,2,1),imshow(f);title('f')f(10:70,40:60)=1;subplot(2,2,2),imshow(f);title('f取后')F=fft2(f,256,256);subplot(2,2,3),imshow(F);title('F')F2=fftshift(F); % 实现补零操作subplot(2,2,4),imshow(F2);title('F2')figure,imshow(log(abs(F2)));title('log(|F2|)')%% dct2 函数采用基于快速傅里叶变换的算法,用于实现较大输入矩阵的离散余弦变换% idct2 函数实现图像的二维逆离散余弦变换RGB=imread('drum.jpg');I=rgb2gray(RGB);J=dct2(I); % 对I进行离散余弦变换imshow(log(abs(J))),title('对原图离散后取对数'),colorbar;J(abs(J)<10)=0;K=idct2(J); % 图像的二维逆离散余弦变换figure,imshow(I),title('原灰度图')figure,imshow(K,[0,255]);title('逆离散变换');%% dctmtx 函数用于实现较小输入矩阵的离散余弦变figure;RGB=imread('4.jpg');I=rgb2gray(RGB);subplot(3,2,1),imshow(I),title('原灰度图');I=im2double(I);subplot(3,2,2),imshow(I),title('取双精度后');T=dctmtx(8); % 离散余弦变换subplot(3,2,3),imshow(I),title('离散余弦变换后');B=blkproc(I,[8,8],'P1*x*P2',T,T');subplot(3,2,4),imshow(B),title('blkproc作用I后的B');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 ];B2=blkproc(B,[8,8],'P1.*x',mask);subplot(3,2,5),imshow(B2),title('blkproc作用B后的B2');I2=blkproc(B2,[8,8],'P1*x*P2',T',T);subplot(3,2,6),imshow(I2),title('blkproc作用B2后的I2');%% edge函数用于提取图像的边缘RGB=imread('4.jpg');I=rgb2gray(RGB);BW=edge(I);imshow(I);figure,imshow(BW);%% radon 函数用来计算指定方向上图像矩阵的投影RGB=imread('4.jpg');I=rgb2gray(RGB);BW=edge(I);theta=0:179;[R,XP]=radon(BW,theta); % 图像矩阵的投影figure,imagesc(theta,XP,R);colormap(hot);xlabel('\theta(degrees)');ylabel('x\prime');title('R_{\theta}(x\prime)');colorbar;%}% ----------------图像增强、分割和编码------------------%{% imhist 函数产生图像的直方图A=imread('4.jpg');B=rgb2gray(A);subplot(2,1,1),imshow(B);subplot(2,1,2),imhist(B);%% histeq 函数用于对图像的直方图均衡化A=imread('4.jpg');B=rgb2gray(A);subplot(2,1,1),imshow(B);subplot(2,1,2),imhist(B);C=histeq(B); % 对图像B进行均衡化figure;subplot(2,1,1),imshow(C);subplot(2,1,2),imhist(C);%% filter2 函数实现均值滤波a=imread('4.jpg');I=rgb2gray(a);subplot(2,2,1),imshow(I);K1=filter2(fspecial('average',3),I)/255; % 3*3的均值滤波K2=filter2(fspecial('average',5),I)/255; % 5*5的均值滤波K3=filter2(fspecial('average',7),I)/255; % 7*7的均值滤波subplot(2,2,2),imshow(K1);subplot(2,2,3),imshow(K2);subplot(2,2,4),imshow(K3);%% wiener2 函数实现Wiener(维纳)滤波a=imread('4.jpg');I=rgb2gray(a);subplot(2,2,1),imshow(I);K1=wiener2(I,[3,3]); % 3*3 wiener滤波K2=wiener2(I,[5,5]); % 5*5 wiener滤波K3=wiener2(I,[7,7]); % 7*7 wiener滤波subplot(2,2,2),imshow(K1);subplot(2,2,3),imshow(K2);subplot(2,2,4),imshow(K3);%% medfilt2 函数实现中值滤波a=imread('4.jpg');I=rgb2gray(a);subplot(2,2,1),imshow(I);K1=medfilt2(I,[3,3]); % 3*3 中值滤波K2=medfilt2(I,[5,5]); % 5*5 中值滤波K3=medfilt2(I,[7,7]); % 7*7 中值滤波subplot(2,2,2),imshow(K1);subplot(2,2,3),imshow(K2);subplot(2,2,4),imshow(K3);%}% ----------------图像模糊及复原------------------%{% deconvwnr 函数:使用维纳滤波器I=imread('qier.jpg');imshow(I);% 对图像进行模糊处理LEN=31;THETA=11;PSF1=fspecial('motion',LEN,THETA); % 运动模糊PSF2=fspecial('gaussian',10,5); % 高斯模糊Blurred1=imfilter(I,PSF1,'circular','conv'); % 得到运动模糊图像Blurred2=imfilter(I,PSF2,'conv'); % 得到高斯噪声模糊图像figure;subplot(1,2,1);imshow(Blurred1);title('Blurred1--"motion"'); subplot(1,2,2);imshow(Blurred2);title('Blurred2--"gaussian"');% 对模糊图像加噪声V=0.002;BlurredNoisy1=imnoise(Blurred1,'gaussian',0,V); % 加高斯噪声BlurredNoisy2=imnoise(Blurred2,'gaussian',0,V); % 加高斯噪声figure;subplot(1,2,1);imshow(BlurredNoisy1);title('BlurredNoisy1'); subplot(1,2,2);imshow(BlurredNoisy2);title('BlurredNoisy2');% 进行维纳滤波wnr1=deconvwnr(Blurred1,PSF1); % 维纳滤波wnr2=deconvwnr(Blurred2,PSF2); % 维纳滤波figure;subplot(1,2,1);imshow(wnr1);title('Restored1,True PSF'); subplot(1,2,2);imshow(wnr2);title('Restored2,True PSF');%% deconvreg函数:使用约束最小二乘滤波器I=imread('qier.jpg');imshow(I);% 对图像进行模糊处理LEN=31;THETA=11;PSF1=fspecial('motion',LEN,THETA); % 运动模糊PSF2=fspecial('gaussian',10,5); % 高斯模糊Blurred1=imfilter(I,PSF1,'circular','conv'); % 得到运动模糊图像Blurred2=imfilter(I,PSF2,'conv'); % 得到高斯噪声模糊图像figure;subplot(1,2,1);imshow(Blurred1);title('Blurred1--"motion"');subplot(1,2,2);imshow(Blurred2);title('Blurred2--"gaussian"');% 对模糊图像加噪声V=0.002;BlurredNoisy1=imnoise(Blurred1,'gaussian',0,V); % 加高斯噪声BlurredNoisy2=imnoise(Blurred2,'gaussian',0,V); % 加高斯噪声figure;subplot(1,2,1);imshow(BlurredNoisy1);title('BlurredNoisy1');subplot(1,2,2);imshow(BlurredNoisy2);title('BlurredNoisy2');NP=V*prod(size(I));reg1=deconvreg(BlurredNoisy1,PSF1,NP); % 约束最小二乘滤波reg2=deconvreg(BlurredNoisy2,PSF2,NP); % 约束最小二乘滤波figure;subplot(1,2,1);imshow(reg1);title('Restored1 with NP');subplot(1,2,2);imshow(reg2);title('Restored2 with NP');%% deconvlucy函数:使用Lucy-Richardson滤波器I=imread('qier.jpg');imshow(I);% 对图像进行模糊处理LEN=31;THETA=11;PSF1=fspecial('motion',LEN,THETA); % 运动模糊PSF2=fspecial('gaussian',10,5); % 高斯模糊Blurred1=imfilter(I,PSF1,'circular','conv'); % 得到运动模糊图像Blurred2=imfilter(I,PSF2,'conv'); % 得到高斯噪声模糊图像figure;subplot(1,2,1);imshow(Blurred1);title('Blurred1--"motion"');subplot(1,2,2);imshow(Blurred2);title('Blurred2--"gaussian"');% 对模糊图像加噪声V=0.002;BlurredNoisy1=imnoise(Blurred1,'gaussian',0,V); % 加高斯噪声BlurredNoisy2=imnoise(Blurred2,'gaussian',0,V); % 加高斯噪声figure;subplot(1,2,1);imshow(BlurredNoisy1);title('BlurredNoisy1');subplot(1,2,2);imshow(BlurredNoisy2);title('BlurredNoisy2');luc1=deconvlucy(BlurredNoisy1,PSF1,5); % 使用Lucy-Richardson滤波luc2=deconvlucy(BlurredNoisy1,PSF1,15); % 使用Lucy-Richardson滤波figure;subplot(1,2,1);imshow(luc1);title('Restored Image,NUMIT=5'); subplot(1,2,2);imshow(luc2);title('Restored Image,NUMIT=15');%}% deconvblind 函数:使用盲卷积算法a=imread('4.jpg');I=rgb2gray(a);figure;imshow(I);title('Original Image');PSF=fspecial('motion',13,45); % 运动模糊figure;imshow(PSF);Blurred=imfilter(I,PSF,'circ','conv'); % 得到运动模糊图像figure;imshow(Blurred);title('Blurred Image');INITPSF=ones(size(PSF));[J,P]=deconvblind(Blurred,INITPSF,30); % 使用盲卷积figure;imshow(J);figure;imshow(P,[],'notruesize');% *-*--*-*-*-*-*-*-*-*-*-*-*图像处理*-*-*-*-*-*-*-*-*-*-*-* %{% 对图像进行减采样a=imread('lena.jpg');%subplot(1,4,1);figure;imshow(a);title('原图');b=rgb2gray(a);%subplot(1,4,2);figure;imshow(b);title('原图的灰度图');[wid,hei]=size(b);%---4倍减采样----quartimg=zeros(wid/2+1,hei/2+1);i1=1;j1=1;for i=1:2:widfor j=1:2:heiquartimg(i1,j1)=b(i,j);j1=j1+1;endi1=i1+1;j1=1;end%subplot(1,4,3);figure;imshow(uint8(quartimg));title('4倍减采样')% ---16倍减采样---quanrtimg=zeros(wid/4+1,hei/4+1);i1=1;j1=1;for i=1:4:widfor j=1:4:heiquanrtimg(i1,j1)=b(i,j);j1=j1+1;endi1=i1+1;j1=1;end%subplot(1,4,4);.figure;imshow(uint8(quanrtimg));title('16倍减采样');%}% 图像类型% 将图像转换为256级灰度图像,64级灰度图像,32级灰度图像,8级灰度图像,2级灰度图像a=imread('4.jpg');%figure;subplot(2,3,1);imshow(a);title('原图');b=rgb2gray(a); % 这是256灰度级的图像%figure;subplot(2,3,2);imshow(b);title('原图的灰度图像');[wid,hei]=size(b);img64=zeros(wid,hei);img32=zeros(wid,hei);img8=zeros(wid,hei);img2=zeros(wid,hei);for i=1:widfor j=j:heiimg64(i,j)=floor(b(i,j)/4); % 转化为64灰度级endend%figure;subplot(2,3,3);imshow(uint8(img64),[0,63]);title('64级灰度图像');for i=1:widfor j=1:heiimg32(i,j)=floor(b(i,j)/8);% 转化为32灰度级endend%figure;subplot(2,3,4);imshow(uint8(img32),[0,31]);title('32级灰度图像');for i=1:widfor j=1:heiimg8(i,j)=floor(b(i,j)/32);% 转化为8灰度级endend%figure;subplot(2,3,5);imshow(uint8(img8),[0,7]);title('8级灰度图像');for i=1:widfor j=1:heiimg2(i,j)=floor(b(i,j)/128);% 转化为2灰度级endend%figure;subplot(2,3,6);imshow(uint8(img2),[0,1]);title('2级灰度图像');% *-*--*-*-*-*-*-*-*-*-*-*-*图像处理*-*-*-*-*-*-*-*-*-*-*-* %{% ------------------ 图像的点运算------------------I=imread('lena.jpg');figure;subplot(1,3,1);imshow(I);title('原图的灰度图');J=imadjust(I,[0.3;0.6],[0.1;0.9]); % 设置灰度变换的范围subplot(1,3,2);imshow(J);title('线性扩展');I1=double(I); % 将图像转换为double类型I2=I1/255; % 归一化此图像C=2; % 非线性扩展函数的参数K=C*log(1+I2); % 对图像的对数变换subplot(1,3,3);imshow(K);title('非线性扩展');M=255-I;figure;subplot(1,3,1);imshow(M);title('灰度倒置');N1=im2bw(I,0.4); % 将此图像二值化,阈值为0.4N2=im2bw(I,0.7); % 将此图像二值化,阈值为0.7 subplot(1,3,2);imshow(N1);title('二值化阈值0.4');subplot(1,3,3);imshow(N2);title('二值化阈值0.7');%}%{% ------------------ 图像的代数运算------------------% 将两幅图像进行加法运算I=imread('lena.jpg');I=rgb2gray(I);J=imread('rice.png');% 以下把两幅图转化为大小一样for i=1:size(I)for j=size(J):size(I)J(i,j)=0;endendI=im2double(I); % 将图像转化为double型J=im2double(J);% imshow(I);figure;imshow(J);K=I+0.3*J; % 将两幅图像相加subplot(1,3,1);imshow(I);title('人物图');subplot(1,3,2);imshow(J);title('背景图');subplot(1,3,3);imshow(K);title('相加后的图');imwrite(K,'i_lena1.jpg');%%% 将两幅图像做减运算,分离背景与原图A=imread('i_lena1.jpg');B=imread('rice.png');% 以下把两幅图转化为大小一样for i=1:size(A)for j=size(B):size(A)B(i,j)=0;endendC=A-0.3*B;a=imread('lena.jpg');subplot(2,2,1);imshow(a);title('原图图');subplot(2,2,2);imshow(A);title('混合图');subplot(2,2,3);imshow(B);title('背景图');subplot(2,2,4);imshow(C);title('分离后的图');%% 设置掩模,需要保留下来的区域,掩模图像的值为1,否则为0 A=imread('drum.jpg');A=rgb2gray(A);A=im2double(A);sizeA=size(A);subplot(1,2,1);imshow(A);title('原图');B=zeros(sizeA(1),sizeA(2)); % 设置模板B(100:400,100:500)=1;K=A.*B; % 两幅图像相乘subplot(1,2,2);imshow(K);title('局部图');%}%{% ------------------ 图像的缩放------------------A=imread('drum.jpg');B1=imresize(A,1.5); % 比例放大1.5杯,默认采用的是最近邻法进行线性插值B2=imresize(A,[420 384]); % 非比例放大到420:384C1=imresize(A,0.7); % 比例缩小0.7倍C2=imresize(A,[150 180]); % 非比例缩小到150:180figure;imshow(B1);title('比例放大图');figure;imshow(B2);title('非比例放大图');figure;imshow(C1);title('比例缩小图');figure;imshow(C2);title('非比例缩小图');% 检测非比例缩放得到的图片是否能还原到原图a=size(A)d=imresize(C2,[a(1),a(2)]);figure;imshow(d);%}% ------------------ 图像的旋转------------------I=imread('drum.jpg');J=imrotate(I,45); % 图像进行逆时针旋转,默认采用最近邻插值法进行插值处理K=imrotate(I,90); % 默认旋转出界的部分不被截出subplot(1,3,1);imshow(I);subplot(1,3,2);imshow(J);subplot(1,3,3);imshow(K);% 检测旋转后的图像是否失真P=imrotate(K,270);figure;imshow(P);。
(完整版)数字图像处理MATLAB程序【完整版】
第一部分数字图像处理实验一图像的点运算实验1.1 直方图一.实验目的1.熟悉matlab图像处理工具箱及直方图函数的使用;2.理解和掌握直方图原理和方法;二.实验设备1.PC机一台;2.软件matlab。
三.程序设计在matlab环境中,程序首先读取图像,然后调用直方图函数,设置相关参数,再输出处理后的图像。
I=imread('cameraman.tif');%读取图像subplot(1,2,1),imshow(I) %输出图像title('原始图像') %在原始图像中加标题subplot(1,2,2),imhist(I) %输出原图直方图title('原始图像直方图') %在原图直方图上加标题四.实验步骤1. 启动matlab双击桌面matlab图标启动matlab环境;2. 在matlab命令窗口中输入相应程序。
书写程序时,首先读取图像,一般调用matlab自带的图像,如:cameraman图像;再调用相应的直方图函数,设置参数;最后输出处理后的图像;3.浏览源程序并理解含义;4.运行,观察显示结果;5.结束运行,退出;五.实验结果观察图像matlab环境下的直方图分布。
(a)原始图像 (b)原始图像直方图六.实验报告要求1、给出实验原理过程及实现代码;2、输入一幅灰度图像,给出其灰度直方图结果,并进行灰度直方图分布原理分析。
实验1.2 灰度均衡一.实验目的1.熟悉matlab图像处理工具箱中灰度均衡函数的使用;2.理解和掌握灰度均衡原理和实现方法;二.实验设备1.PC机一台;2.软件matlab;三.程序设计在matlab环境中,程序首先读取图像,然后调用灰度均衡函数,设置相关参数,再输出处理后的图像。
I=imread('cameraman.tif');%读取图像subplot(2,2,1),imshow(I) %输出图像title('原始图像') %在原始图像中加标题subplot(2,2,3),imhist(I) %输出原图直方图title('原始图像直方图') %在原图直方图上加标题a=histeq(I,256); %直方图均衡化,灰度级为256subplot(2,2,2),imshow(a) %输出均衡化后图像title('均衡化后图像') %在均衡化后图像中加标题subplot(2,2,4),imhist(a) %输出均衡化后直方图title('均衡化后图像直方图') %在均衡化后直方图上加标题四.实验步骤1. 启动matlab双击桌面matlab图标启动matlab环境;2. 在matlab命令窗口中输入相应程序。
实验一 MATLAB数字图像处理初步
实验一MATLAB数字图像处理初步一、实验目的1、熟悉及掌握在MATLAB中能够处理哪些格式图像。
2、熟练掌握在MATLAB中读取图像,并获取图像的大小、颜色、高度、宽度等等相关信息。
3、掌握在MATLAB中按照指定要求存储一幅图像的方法。
4、熟悉数字图像矩阵的格式转换二、实验原理及知识点1、数字图像的表示和类别一幅图像可以被定义为一个二维函数f(x,y),其中x和y是空间(平面)坐标,f 在任何坐标处(x,y)处的振幅称为图像在该点的亮度。
灰度是用来表示黑白图像亮度的一个术语,而彩色图像是由单个二维图像组合形成的。
例如,在RGB彩色系统中,一幅彩色图像是由三幅独立的分量图像(红、绿、蓝)组成的。
因此,许多为黑白图像处理开发的技术适用于彩色图像处理,方法是分别处理三副独立的分量图像即可。
图像关于x和y坐标以及振幅连续。
要将这样的一幅图像转化为数字形式,就要求数字化坐标和振幅。
将坐标值数字化成为取样;将振幅数字化成为量化。
采样和量化的过程如图1所示。
因此,当f的x、y分量和振幅都是有限且离散的量时,称该图像为数字图像。
作为MATLAB基本数据类型的数值数组本身十分适于表达图像,矩阵的元素和图像的像素之间有着十分自然的对应关系。
图1 图像的采样和量化根据图像数据矩阵解释方法的不同,MATLAB把其处理为4类: 亮度图像(Intensity images)二值图像(Binary images)索引图像(Indexed images)RGB图像(RGB images)(1) 亮度图像一幅亮度图像是一个数据矩阵,其归一化的取值表示亮度。
若亮度图像的像素都是uint8类或uint16类,则它们的整数值范围分别是[0,255]和[0,65536]。
若图像是double类,则像素取值就是浮点数。
规定双精度型归一化亮度图像的取值范围是[0,1](2) 二值图像一幅二值图像是一个取值只有0和1的逻辑数组。
而一幅取值只包含0和1的uint8类数组,在MATLAB中并不认为是二值图像。
数字图像处理 matlab代码
MATLAB实用源代码图像读取及灰度变换I=imread('cameraman.tif');%读取图像subplot(1,2,1),imshow(I) %输出图像title('原始图像') %在原始图像中加标题subplot(1,2,2),imhist(I) %输出原图直方图title('原始图像直方图') %在原图直方图上加标题图像旋转I = imread('cameraman.tif');figure,imshow(I);theta = 30;K = imrotate(I,theta); % Try varying the angle, theta. figure, imshow(K)边缘检测I = imread('cameraman.tif');J1=edge(I,'sobel');J2=edge(I,'prewitt');J3=edge(I,'log');subplot(1,4,1),imshow(I);subplot(1,4,2),imshow(J1);subplot(1,4,3),imshow(J2);subplot(1,4,4),imshow(J3);1.图像反转MATLAB 程序实现如下:I=imread('xian.bmp');J=double(I);J=-J+(256-1); %图像反转线性变换H=uint8(J);subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(H);2.灰度线性变换MATLAB 程序实现如下:I=imread('xian.bmp');subplot(2,2,1),imshow(I);title('原始图像');axis([50,250,50,200]);axis on; %显示坐标系I1=rgb2gray(I);subplot(2,2,2),imshow(I1);title('灰度图像');axis([50,250,50,200]);axis on; %显示坐标系J=imadjust(I1,[0.1 0.5],[]); %局部拉伸,把[0.1 0.5]内的灰度拉伸为[0 1] subplot(2,2,3),imshow(J);title('线性变换图像[0.1 0.5]');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系K=imadjust(I1,[0.3 0.7],[]); %局部拉伸,把[0.3 0.7]内的灰度拉伸为[0 1] subplot(2,2,4),imshow(K);title('线性变换图像[0.3 0.7]');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系3.非线性变换MATLAB 程序实现如下:I=imread('xian.bmp');I1=rgb2gray(I);subplot(1,2,1),imshow(I1);title(' 灰度图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系J=double(I1);J=40*(log(J+1));H=uint8(J);subplot(1,2,2),imshow(H);title(' 对数变换图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系4.直方图均衡化MATLAB 程序实现如下:I=imread('xian.bmp');I=rgb2gray(I);figure;subplot(2,2,1);imshow(I);subplot(2,2,2);imhist(I);I1=histeq(I);figure;subplot(2,2,1);imshow(I1);subplot(2,2,2);imhist(I1);5. 线性平滑滤波器用MA TLAB实现领域平均法抑制噪声程序:I=imread('xian.bmp');subplot(231)imshow(I)title('原始图像')I=rgb2gray(I);I1=imnoise(I,'salt & pepper',0.02);subplot(232)imshow(I1)title(' 添加椒盐噪声的图像')k1=filter2(fspecial('average',3),I1)/255; %进行3*3模板平滑滤波k2=filter2(fspecial('average',5),I1)/255; %进行5*5模板平滑滤波k3=filter2(fspecial('average',7),I1)/255; %进行7*7模板平滑滤波k4=filter2(fspecial('average',9),I1)/255; %进行9*9模板平滑滤波subplot(233),imshow(k1);title('3*3 模板平滑滤波');subplot(234),imshow(k2);title('5*5 模板平滑滤波');subplot(235),imshow(k3);title('7*7 模板平滑滤波');subplot(236),imshow(k4);title('9*9 模板平滑滤波');6.中值滤波器用MA TLAB实现中值滤波程序如下:I=imread('xian.bmp');I=rgb2gray(I);J=imnoise(I,'salt&pepper',0.02);subplot(231),imshow(I);title('原图像');subplot(232),imshow(J);title('添加椒盐噪声图像');k1=medfilt2(J); %进行3*3模板中值滤波k2=medfilt2(J,[5,5]); %进行5*5模板中值滤波k3=medfilt2(J,[7,7]); %进行7*7模板中值滤波k4=medfilt2(J,[9,9]); %进行9*9模板中值滤波subplot(233),imshow(k1);title('3*3模板中值滤波');subplot(234),imshow(k2);title('5*5模板中值滤波');subplot(235),imshow(k3);title('7*7模板中值滤波');subplot(236),imshow(k4);title('9*9 模板中值滤波');7.用Sobel算子和拉普拉斯对图像锐化:I=imread('xian.bmp');subplot(2,2,1),imshow(I);title('原始图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系I1=im2bw(I);subplot(2,2,2),imshow(I1);title('二值图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系H=fspecial('sobel'); %选择sobel算子J=filter2(H,I1); %卷积运算subplot(2,2,3),imshow(J);title('sobel算子锐化图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系h=[0 1 0,1 -4 1,0 1 0]; %拉普拉斯算子J1=conv2(I1,h,'same'); %卷积运算subplot(2,2,4),imshow(J1);title('拉普拉斯算子锐化图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系8.梯度算子检测边缘用MA TLAB实现如下:I=imread('xian.bmp');subplot(2,3,1);imshow(I);title('原始图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系I1=im2bw(I);subplot(2,3,2);imshow(I1);title('二值图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系I2=edge(I1,'roberts');figure;subplot(2,3,3);imshow(I2);title('roberts算子分割结果');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系I3=edge(I1,'sobel');subplot(2,3,4);imshow(I3);title('sobel算子分割结果');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系I4=edge(I1,'Prewitt');subplot(2,3,5);imshow(I4);title('Prewitt算子分割结果');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系9.LOG算子检测边缘用MA TLAB程序实现如下:I=imread('xian.bmp');subplot(2,2,1);imshow(I);title('原始图像');I1=rgb2gray(I);subplot(2,2,2);imshow(I1);title('灰度图像');I2=edge(I1,'log');subplot(2,2,3);imshow(I2);title('log算子分割结果');10.Canny算子检测边缘用MA TLAB程序实现如下:I=imread('xian.bmp');subplot(2,2,1);imshow(I);title('原始图像')I1=rgb2gray(I);subplot(2,2,2);imshow(I1);title('灰度图像');I2=edge(I1,'canny');subplot(2,2,3);imshow(I2);title('canny算子分割结果');11.边界跟踪(bwtraceboundary函数)clcclear allI=imread('xian.bmp');figureimshow(I);title('原始图像');I1=rgb2gray(I); %将彩色图像转化灰度图像threshold=graythresh(I1); %计算将灰度图像转化为二值图像所需的门限BW=im2bw(I1, threshold); %将灰度图像转化为二值图像figureimshow(BW);title('二值图像');dim=size(BW);col=round(dim(2)/2)-90; %计算起始点列坐标row=find(BW(:,col),1); %计算起始点行坐标connectivity=8;num_points=180;contour=bwtraceboundary(BW,[row,col],'N',connectivity,num_points);%提取边界figureimshow(I1);hold on;plot(contour(:,2),contour(:,1), 'g','LineWidth' ,2);title('边界跟踪图像');12.Hough变换I= imread('xian.bmp');rotI=rgb2gray(I);subplot(2,2,1);imshow(rotI);title('灰度图像');axis([50,250,50,200]);grid on;axis on;BW=edge(rotI,'prewitt');subplot(2,2,2);imshow(BW);title('prewitt算子边缘检测后图像');axis([50,250,50,200]);grid on;axis on;[H,T,R]=hough(BW);subplot(2,2,3);imshow(H,[],'XData',T,'YData',R,'InitialMagnification','fit');title('霍夫变换图');xlabel('\theta'),ylabel('\rho');axis on , axis normal, hold on;P=houghpeaks(H,5,'threshold',ceil(0.3*max(H(:))));x=T(P(:,2));y=R(P(:,1));plot(x,y,'s','color','white');lines=houghlines(BW,T,R,P,'FillGap',5,'MinLength',7);subplot(2,2,4);,imshow(rotI);title('霍夫变换图像检测');axis([50,250,50,200]);grid on;axis on;hold on;max_len=0;for k=1:length(lines)xy=[lines(k).point1;lines(k).point2];plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');len=norm(lines(k).point1-lines(k).point2);if(len>max_len)max_len=len;xy_long=xy;endendplot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','cyan');13.直方图阈值法用MA TLAB实现直方图阈值法:I=imread('xian.bmp');I1=rgb2gray(I);figure;subplot(2,2,1);imshow(I1);title(' 灰度图像')axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系[m,n]=size(I1); %测量图像尺寸参数GP=zeros(1,256); %预创建存放灰度出现概率的向量for k=0:255GP(k+1)=length(find(I1==k))/(m*n); %计算每级灰度出现的概率,将其存入GP中相应位置endsubplot(2,2,2),bar(0:255,GP,'g') %绘制直方图title('灰度直方图')xlabel('灰度值')ylabel(' 出现概率')I2=im2bw(I,150/255);subplot(2,2,3),imshow(I2);title('阈值150的分割图像')axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系I3=im2bw(I,200/255); %subplot(2,2,4),imshow(I3);title('阈值200的分割图像')axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系14. 自动阈值法:Otsu法用MA TLAB实现Otsu算法:clcclear allI=imread('xian.bmp');subplot(1,2,1),imshow(I);title('原始图像')axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系level=graythresh(I); %确定灰度阈值BW=im2bw(I,level);subplot(1,2,2),imshow(BW);title('Otsu 法阈值分割图像')axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系15.膨胀操作I=imread('xian.bmp'); %载入图像I1=rgb2gray(I);subplot(1,2,1);imshow(I1);title('灰度图像')axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系se=strel('disk',1); %生成圆形结构元素I2=imdilate(I1,se); %用生成的结构元素对图像进行膨胀subplot(1,2,2);imshow(I2);title(' 膨胀后图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系16.腐蚀操作MATLAB 实现腐蚀操作I=imread('xian.bmp'); %载入图像I1=rgb2gray(I);subplot(1,2,1);imshow(I1);title('灰度图像')axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系se=strel('disk',1); %生成圆形结构元素I2=imerode(I1,se); %用生成的结构元素对图像进行腐蚀subplot(1,2,2);imshow(I2);title('腐蚀后图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系17.开启和闭合操作用MA TLAB实现开启和闭合操作I=imread('xian.bmp'); %载入图像subplot(2,2,1),imshow(I);title('原始图像');axis([50,250,50,200]);axis on; %显示坐标系I1=rgb2gray(I);subplot(2,2,2),imshow(I1);title('灰度图像');axis([50,250,50,200]);axis on; %显示坐标系se=strel('disk',1); %采用半径为1的圆作为结构元素I2=imopen(I1,se); %开启操作I3=imclose(I1,se); %闭合操作subplot(2,2,3),imshow(I2);title('开启运算后图像');axis([50,250,50,200]);axis on; %显示坐标系subplot(2,2,4),imshow(I3);title('闭合运算后图像');axis([50,250,50,200]);axis on; %显示坐标系18.开启和闭合组合操作I=imread('xian.bmp'); %载入图像subplot(3,2,1),imshow(I);title('原始图像');axis([50,250,50,200]);axis on; %显示坐标系I1=rgb2gray(I);subplot(3,2,2),imshow(I1);title('灰度图像');axis([50,250,50,200]);axis on; %显示坐标系se=strel('disk',1);I2=imopen(I1,se); %开启操作I3=imclose(I1,se); %闭合操作subplot(3,2,3),imshow(I2);title('开启运算后图像');axis([50,250,50,200]);axis on; %显示坐标系subplot(3,2,4),imshow(I3);title('闭合运算后图像');axis([50,250,50,200]);axis on; %显示坐标系se=strel('disk',1);I4=imopen(I1,se);I5=imclose(I4,se);subplot(3,2,5),imshow(I5); %开—闭运算图像title('开—闭运算图像');axis([50,250,50,200]);axis on; %显示坐标系I6=imclose(I1,se);I7=imopen(I6,se);subplot(3,2,6),imshow(I7); %闭—开运算图像title('闭—开运算图像');axis([50,250,50,200]);axis on; %显示坐标系19.形态学边界提取利用MATLAB实现如下:I=imread('xian.bmp'); %载入图像subplot(1,3,1),imshow(I);title('原始图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系I1=im2bw(I);subplot(1,3,2),imshow(I1);title('二值化图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系I2=bwperim(I1); %获取区域的周长subplot(1,3,3),imshow(I2);title('边界周长的二值图像');axis([50,250,50,200]);grid on;axis on;20.形态学骨架提取利用MATLAB实现如下:I=imread('xian.bmp');subplot(2,2,1),imshow(I);title('原始图像');axis([50,250,50,200]);axis on;I1=im2bw(I);subplot(2,2,2),imshow(I1);title('二值图像');axis([50,250,50,200]);axis on;I2=bwmorph(I1,'skel',1);subplot(2,2,3),imshow(I2);title('1次骨架提取');axis([50,250,50,200]);axis on;I3=bwmorph(I1,'skel',2);subplot(2,2,4),imshow(I3);title('2次骨架提取');axis([50,250,50,200]);axis on;21.直接提取四个顶点坐标I = imread('xian.bmp');I = I(:,:,1);BW=im2bw(I);figureimshow(~BW)[x,y]=getpts。
《数字图像处理及MATLAB实现》图像增强与平滑实验
《数字图像处理及MATLAB实现》图像增强与平滑实验一.实验目的及要求1、熟悉并掌握MA TLAB 图像处理工具箱的使用;2、理解并掌握常用的图像的增强技术。
二、实验设备MATLAB 6.5 以上版本、WIN XP 或WIN2000 计算机三、实验内容(一)研究以下程序,分析程序功能;输入执行各命令行,认真观察命令执行的结果。
熟悉程序中所使用函数的调用方法,改变有关参数,观察试验结果。
(可将每段程序保存为一个.m文件)1.直方图均衡化clear all; close all % Clear the MATLAB workspace of any variables% and close open figure windows.I = imread('pout.tif'); % Reads the sample images ‘pout.tif’, and stores it inimshow(I) % an array named I.display the imagetext(60,20,'李荣桉1909290239','horiz','center','color','r')figure, imhist(I) % Create a histogram of the image and display it in% a new figure window.[I2,T] = histeq(I); % Histogram equalization.figure, imshow(I2) % Display the new equalized image, I2, in a new figure window.text(60,20,'李荣桉1909290239','horiz','center','color','r')figure, imhist(I2) % Create a histogram of the equalized image I2.figure,plot((0:255)/255,T); % plot the transformation curve.imwrite (I2, 'pout2.png'); % Write the newly adjusted image I2 to a disk file named% ‘pout2.png’.imfinfo('pout2.png') % Check the contents of the newly written file2.直接灰度变换clear all; close allI = imread('cameraman.tif'); 注意:imadjust()功能:调整图像灰度值或颜色映像表,也可实现伽马校正。
《数字图像处理(matlab版)》教程课件
直
原
接
图
阈
像
值
分
割
0.25
算 法
算 法 算 法
割
分
法
算
OTSU
Niblack
KittlerMet
Kapur
割
分
值
阈
动
自
/2、图像的点运算
五、直方图均衡化
DB f
添 加 高 斯 白 噪 声
添 加 椒 盐 噪 声
/4、空间域图像增强 二、空间域滤波
滤波过程就是在图像f(x,y)中逐点移动模板,使模板中心和点(x,y)重合,滤波器 在每一点(x,y)的响应是根据模板的具体内容并通过预先定义的关系来计算的。
W(-1,-1) W(-1,0) W(-1,1)
W(0,-1) W(0,0) W(0,1)
原 图 像 及 直 方 图
图像变暗后灰度均衡化 图像变亮后灰度均衡化
/3、图像的几何变换
一、图像平移
正变换
1 0 0
[ x1 y1 1] [ x0 y0 1] 0 1 0
Tx
Ty
1
逆变换
1
0 0
[x0 y0 1] [x1 y1 1] 0
1 0
Tx
Ty
1
strel %用来创建形态学结构元素 translate(SE,[y x])%原结构元素SE上y和x方向平移 imdilate%形态学膨胀
thresh法:最大类间方差法自动单阈值分割。
Kapur算法:一维直方图熵阈值算法
niblack算法:局部阈值分割 阈值的计算公式是T = m + k*v,其中m为以该像素点为中心的区域的平 均灰度值,v是该区域的标准差,k是一个系数。
数字图像处理ch01(MATLAB)-课件
2024/10/12
第一章 绪论
17
2024/10/12
第一章 绪论
18
2024/10/12
第一章 绪论
19
2024/10/12
第一章 绪论
20
<2>几何处理
放大、缩小、旋转,配准,几何校正,面积、周长计算。
请计算台湾的陆地面积
2024/10/12
第一章 绪论
21
<3>图象复原
由图象的退化模型,求出原始图象
图像处理是指按照一定的目标,用一系列的操 作来“改造”图像的方法.
2024/10/12
第一章 绪论
7
➢图象处理技术的分类(从方法上进行分类)[2]
1.模拟图象处理(光学图像处理等)
用光学、电子等方法对模拟信号组成的图像,用光学器 件、电子器件进行光学变换等处理得到所需结果(哈哈 镜、望远镜,放大镜,电视等).
2024/10/12
第一章 绪论
22
<4>图象重建[3]
[3]此图像来自罗立民,脑成像,
2024/10/12
第一章 绪论
23
/zhlshb/ct/lx.htm
2024/10/12
第一章 绪论
图形用户界面,动画,网页制作等
2024/10/12象处理的基本概念,和基 本问题,以及一些典型的应用。
2024/10/12
第一章 绪论
33
提问
摄像头(机),扫描仪,CT成像装置,其他图象成像装置
2)图象的存储
各种图象存储压缩格式(JPEG,MPEG等),海量图象数据库技术
3)图象的传输
内部传输(DirectMemoryAccess),外部传输(主要是网络)
数字图像处理实验matlab4
9,对图3实施正交变换编码和解码(采用离散傅立叶变换)。
建议将图3分成4*4的4个子图象。
思路:先将图3数据读入模块,显示图像,将图分块进行DFT 变换,显示图像,,在进行反变换恢复原数据,在进行哈夫曼编码编码,后解码。
原理:傅立叶变换傅立叶变换是数字图像处理中应用最广的一种变换,其中图像增强、图像复原和图像分析与描述等,每一类处理方法都要用到图像变换,尤其是图像的傅立 叶变换。
离散傅立叶(Fourier )变换的定义:二维离散傅立叶变换(DFT )为:逆变换为:式中,在DFT 变换对中, 称为离散信号 的频谱,而 称为幅度谱,为相位角,功率谱为频谱的平方,它们之间的关系为:图像的傅立叶变换有快速算法。
下面给出具体的Huffman 编码算法。
(1)首先统计出每个符号出现的频率,例如S0到S7的出现频率分别为:0.25,0.19,0.08,0.06,0.21,0.02,0.03,0.16(2)从左到右把上述频率按从大到小的顺序排列。
∑∑-=-=+-=1010)(2exp ),(1),(M x N y N vy M ux j y x f MN v u F π∑∑-=-=+=101)(2exp ),(1),(M u N v N vy M ux j v u F MN y x f π}1,,1,0{,-∈M x u }1,,1,0{,-∈N y v ),(v u F ),(y x f ),(v u F ),(v u ϕ),(),()],(exp[),(),(v u jI v u R v u j v u F v u F +==ϕ(3)将最小的两个数相加的值表上*号,其余的数据不变,然后将得到的数据排序(4)重复(3),直到只有两个数据。
(5) 从最后一列概率编码,从而得到最终编码。
具体过程如下图所示:概率压缩过程:初始信源信源的消减步骤 符号概率 1 2 3 4 5 6 S00.25 0.25 0.25 0.25 0.35* 0.4* 0.6* 0.21 0.21 0.21 0.25 0.35 0.4 0.19 0.19 0.19 0.21 0.25 0.16 0.16 0.19* 0.19 0.08 0.11* 0.16 0.06 0.08 0.05*S40.21 S10.19 S70.16 S20.08 S30.06 S60.03 S5 0.02表 3-1 哈夫曼概率压缩过程编码过程: 初始信源 对消减信源的赋值符号 概率 编码 1 2 3 4 5 6 S00.25 01 0.25 01 0.25 01 0.25 01 0.35*00 0.4* 1 0.6* 0 0.21 10 0.21 10 0.21 10 0.25 01 0.35 00 0.4 1 0.19 11 0.19 11 0.19 11 0.21 10 0.25 01 0.16 001 0.16 001 0.19*000 0.19 11 0.08 0001 0.11* 0000 0.16 0001 0.06 00000 0.08 0001 0.05* 00001S40.21 10 S10.19 11 S70.16 001 S20.08 0001 S30.06 00000 S60.03 S5 0.02表 3-2 哈夫曼算法编码过程算法流程此处并没有采用概率排序, 而是采用对灰度像素个数 读入图像 初始化 统计每种灰度数灰度数排序排序,这是因为计算概率无 疑增大了计算量,因此用灰 度级的像素个数替代图3-1 哈夫曼算法程序流程图程序:clc;clear;close all ;A=[3 3 4 4 4 4 5 24 1 1 2 2 15 44 3 4 4 4 45 24 5 2 5 0 3 1 21 5 0 3 3 5 6 42 3 1 1 2 2 1 20 3 6 5 5 7 2 03 1 2 2 1 5 0 6];subplot(2,2,1),imshow(A);title('原图');I=double(A);P=A(1:4,1:4);K=fft(P);P1=A(1:4,5:8);K1=fft(P1);P2=A(5:8,1:4);K2=fft(P2);P3=A(5:8,5:8);K3=fft(P3);for i=1:4for j=1:4H(i,j)=K(i,j);endendfor i=1:4for j=5:8H(i,j)=K1(i,j-4);endendfor i=5:8 按哈夫曼算法编码 将灰度编码表及原图的编码写入txtfor j=1:4H(i,j)=K2(i-4,j);endendfor i=5:8for j=5:8H(i,j)=K3(i-4,j-4);endendsubplot(2,2,2),imshow(H);title('DFT变换后的频域图像');I=H(1:4,1:4);M=ifft(I);I1=H(1:4,5:8);M1=ifft(I1);I2=H(5:8,1:4);M2=ifft(I2);I3=H(5:8,5:8);M3=ifft(I3);for i=1:4for j=1:4A1(i,j)=M(i,j);endendfor i=1:4for j=5:8A1(i,j)=M1(i,j-4);endendfor i=5:8for j=1:4A1(i,j)=M2(i-4,j);endendfor i=5:8for j=5:8A1(i,j)=M3(i-4,j-4);endendsubplot(2,2,3),imshow(A1);title('复原图像');%编码%读入图像,定义结构体,便于存储I=A;pix(8)=struct('huidu',0.0,...'number',0.0,...'bianma','');[m n l]=size(I);fid=fopen('E:\学习\数字图像处理\huffman.txt','w');%huffman.txt是灰度级及相应的编码表fid1=fopen('E:\学习\数字图像处理\huff_compara.txt','w');%huff_compara.txt是编码表huf_bac=cell(1,l);for t=1:l %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %初始化结构数组for i=1:8pix(i).number=1;pix(i).huidu=i-1;pix(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:7for j=i+1:8if pix(i).number<pix(j).numbertemp=pix(j);pix(j)=pix(i);pix(i)=temp;endendendfor i=8:-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,标号小的为0huffman(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')%存储解码矩阵Msubplot(2,2,4),imshow(A);title('解码后图');原图DFT变换后的频域图像复原图像解码后图对应编码:0 00011 0012 103 0114 115 0106 000007 00001矩阵的编码11 001 001 10 10 001 010 11 ,11 011 11 11 11 11 010 10 ,11 010 10 010 0001 011 001 10 ,001 010 0001 011 011 010 00000 11 ,10 011 001 001 10 10 001 10 ,0001 011 00000 010 010 00001 10 0001 ,011 001 10 10 001 010 0001 00000 ,解码矩阵:M =3 34 4 4 45 24 1 1 2 2 15 44 3 4 4 4 45 24 5 2 5 0 3 1 21 5 0 3 3 5 6 42 3 1 1 2 2 1 2 0 3 6 5 5 7 2 0 3 1 2 2 1 5 0 6。
数字图像处理matlab代码
一、编写程序完成不同滤波器的图像频域降噪和边缘增强的算法并进行比较,得出结论。
1、不同滤波器的频域降噪1.1 理想低通滤波器(ILPF)和二阶巴特沃斯低通滤波器(BLPF)clc;clear all;close all;I1=imread('me.jpg');I1=rgb2gray(I1);subplot(2,2,1),imshow(I1),title('原始图像');I2=imnoise(I1,'salt & pepper');subplot(2,2,2),imshow(I2),title('噪声图像');F=double(I2);g = fft2(F);g = fftshift(g);[M, N]=size(g);result1=zeros(M,N);result2=zeros(M,N);nn = 2;d0 =50;m = fix(M/2);n = fix(N/2);for i = 1:Mfor j = 2:Nd = sqrt((i-m)^2+(j-n)^2);h = 1/(1+0.414*(d/d0)^(2*nn));result1(i,j) = h*g(i,j);if(g(i,j)< 50)result2(i,j) = 0;elseresult2(i,j) =g(i,j);endendendresult1 = ifftshift(result1);result2 = ifftshift(result2);J2 = ifft2(result1);J3 = uint8(real(J2));subplot(2, 2, 3),imshow(J3,[]),title('巴特沃斯低通滤波结果'); J4 = ifft2(result2);J5 = uint8(real(J4));subplot(2, 2, 4),imshow(J5,[]),title('理想低通滤波结果');实验结果:原始图像噪声图像巴特沃斯低通滤波结果理想低通滤波结果1.2 指数型低通滤波器(ELPF)clc;clear all;close all;I1=imread('me.jpg');I1=rgb2gray(I1);I2=im2double(I1);I3=imnoise(I2,'gaussian',0.01);I4=imnoise(I3,'salt & pepper',0.01);subplot(1,3,1),imshow(I2), title('原始图像'); %显示原始图像subplot(1,3,2),imshow(I4),title('加入混合躁声后图像 ');s=fftshift(fft2(I4));%将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心[M,N]=size(s); %分别返回s的行数到M中,列数到N中n1=floor(M/2); %对M/2进行取整n2=floor(N/2); %对N/2进行取整d0=40;for i=1:Mfor j=1:Nd=sqrt((i-n1)^2+(j-n2)^2); %点(i,j)到傅立叶变换中心的距离 h=exp(log(1/sqrt(2))*(d/d0)^2);s(i,j)=h*s(i,j); %ILPF滤波后的频域表示endends=ifftshift(s); %对s进行反FFT移动s=im2uint8(real(ifft2(s)));subplot(1,3,3),imshow(s),title('ELPF滤波后的图像(d=40)');运行结果:1.3 梯形低通滤波器(TLPF)clc;clear all;close all;I1=imread('me.jpg');I1=rgb2gray(I1); %读取图像I2=im2double(I1);I3=imnoise(I2,'gaussian',0.01);I4=imnoise(I3,'salt & pepper',0.01);subplot(1,3,1),imshow(I2),title('原始图像'); %显示原始图像subplot(1,3,2),imshow(I4),title('加噪后的图像');s=fftshift(fft2(I4));%将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心[M,N]=size(s); %分别返回s的行数到M中,列数到N中n1=floor(M/2); %对M/2进行取整n2=floor(N/2); %对N/2进行取整d0=10;d1=160;for i=1:Mfor j=1:Nd=sqrt((i-n1)^2+(j-n2)^2); %点(i,j)到傅立叶变换中心的距离 if (d<=d0)h=1;else if (d0<=d1)h=(d-d1)/(d0-d1);else h=0;endends(i,j)=h*s(i,j); %ILPF滤波后的频域表示endends=ifftshift(s); %对s进行反FFT移动s=im2uint8(real(ifft2(s))); %对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数subplot(1,3,3),imshow(s),title('TLPF滤波后的图像');运行结果:1.4 高斯低通滤波器(GLPF)clear all;clc;close all;I1=imread('me.jpg');I1=rgb2gray(I1);I2=im2double(I1);I3=imnoise(I2,'gaussian',0.01);I4=imnoise(I3,'salt & pepper',0.01);subplot(1,3,1),imshow(I2),title('原始图像');subplot(1,3,2),imshow(I4),title('加噪后的图像');s=fftshift(fft2(I4));%将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心[M,N]=size(s); %分别返回s的行数到M中,列数到N中n1=floor(M/2); %对M/2进行取整n2=floor(N/2); %对N/2进行取整d0=40;for i=1:Mfor j=1:Nd=sqrt((i-n1)^2+(j-n2)^2); %点(i,j)到傅立叶变换中心的距离 h=1*exp(-1/2*(d^2/d0^2)); %GLPF滤波函数s(i,j)=h*s(i,j); %ILPF滤波后的频域表示endends=ifftshift(s); %对s进行反FFT移动s=im2uint8(real(ifft2(s))); %对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数subplot(1,3,3),imshow(s),title('GLPF滤波后的图像(d=40)');运行结果:1.5 维纳滤波器clc;clear all;close all;I=imread('me.jpg'); %读取图像I=rgb2gray(I);I1=im2double(I);I2=imnoise(I1,'gaussian',0.01);I3=imnoise(I2,'salt & pepper',0.01);I4=wiener2(I3);subplot(1,3,1),imshow(I1),title('原始图像'); %显示原始图像subplot(1,3,2),imshow(I3),title('加入混合躁声后图像');I4=wiener2(I3);subplot(1,3,3),imshow(I4),title('wiener滤波后的图像');运行结果:结论:理想低通滤波器,虽然有陡峭的截止频率,却不能产生良好的效果,图像由于高频分量的滤除而变得模糊,同时还产生振铃效应。
数字图像处理实验指导书(带源程序)
实验一Matlab图像处理工具箱的初步练习一. 实验目的1. 掌握有关数字图像处理的基本概念;2. 熟悉Matlab图像处理工具箱;3. 熟悉使用Matlab进行数字图像的读出和显示;4. 熟悉运用Matlab指令进行图像旋转和缩放变换。
二. 练习1. 文件的读入与显示(1) 运行Matlab。
(2) MATLAB窗口构成:在缺省的情况下,由三个窗口组成。
命令窗口(command window)、命令历史(command history)、工作空间(workspace)。
注意:缺省窗口的设置步骤为:MATLAB菜单/view选项/Desktop layout/default。
(3) 调入一个文件:i=imread('pout.tif');%注意:前面的“%”是用于注释的,不会被执行,只是说明这个语句的作用。
此时的i出现在什么窗口?是什么类型的变量?大小是多少?(4) 显示这幅图:imshow(i);(5) 将变量i转置成j,即j=i';显示j即imshow(j);%在胸前左侧花纹怎么会跑到右边的呢?举一个例子加以验证:设a=[1 2 3 4 5;6 7 8 9 10;11 12 13 14 15];b=a’;此时的b与a有什么区别?(6) 写入到一个新的图像文件'abc.tif'中,即imwrite(j,'abc.tif')。
(7) 清除变量命令:clear执行这个命令后,workspace窗口中的变量有没有?怎么验证?(8) 清除用户开设的窗口命令:close all(9) 调入图像文件'abc.tif'并显示。
问题:(1) 操作符“’”是图像的转置的意思,转置两次后,是否回到原图像?(2) 命令后的符号“;”所起的作用是什么?(3) 命令是否可以大写母?2. 灰度图像分别选择不同的灰度级(如2、4、16、64、128个)来显示同一幅图像(如testpat1.tif)。
数字图像处理实验(MATLAB版)
数字图像处理实验(MATLAB版)数字图像处理(MATLAB版)实验指导书(试用版)湖北师范学院教育信息与技术学院2009年4月试行目录实验一、数字图像获取和格式转换 2 实验二、图像亮度变换和空间滤波 6 实验三、频域处理7 实验四、图像复原9 实验五、彩色图像处理101实验六、图像压缩11 实验七、图像分割13 教材与参考文献142《数字图像处理》实验指导书实验一、数字图像获取和格式转换一、实验目的1掌握使用扫描仪、数码相机、数码摄像级机、电脑摄像头等数字化设备以及计算机获取数字图像的方法;2修改图像的存储格式;并比较不同压缩格式图像的数据量的大小。
二、实验原理数字图像获取设备的主要性能指标有x、y方向的分辨率、色彩分辨率(色彩位数)、扫描幅面和接口方式等。
各类设备都标明了它的光学分辨率和最大分辨率。
分辨率的单位是dpi,dpi是英文Dot Per Inch的缩写,意思是每英寸的像素点数。
扫描仪扫描图像的步骤是:首先将欲扫描的原稿正面朝下铺在扫描仪的玻璃板上,原稿可以是文字稿件或者图纸照片;然后启3动扫描仪驱动程序后,安装在扫描仪内部的可移动光源开始扫描原稿。
为了均匀照亮稿件,扫描仪光源为长条形,并沿y方向扫过整个原稿;照射到原稿上的光线经反射后穿过一个很窄的缝隙,形成沿x方向的光带,又经过一组反光镜,由光学透镜聚焦并进入分光镜,经过棱镜和红绿蓝三色滤色镜得到的RGB三条彩色光带分别照到各自的CCD 上,CCD将RGB光带转变为模拟电子信号,此信号又被A/D变换器转变为数字电子信号。
至此,反映原稿图像的光信号转变为计算机能够接受的二进制数字电子信号,最后通过串行或者并行等接口送至计算机。
扫描仪每扫一行就得到原稿x方向一行的图像信息,随着沿y方向的移动,在计算机内部逐步形成原稿的全图。
扫描仪工作原理见图1.1。
4图1.1扫描仪的工作原理在扫描仪的工作过程中,有两个元件起到了关键的作用。
一个是CCD,它将光信号转换成为电信号;另一个是A/D变换器,它将模拟电信号变为数字电信号。
数字图像处理及MATLAB实现4
数字图像处理及MATLAB实现4武汉理工大学信息学院第4章图像变换(ImageTranform)4.1连续傅里叶变换4.2离散傅里叶变换4.3快速傅里叶变换4.4傅里叶变换的性质4.5图像傅里叶变换实例4.6其他离散变换一、图象变换的引入1.方法:对图象信息进行变换,使能量保持但重新分配。
2.目的:有利于加工、处理[滤除不必要信息(如噪声),加强/提取感兴趣的部分或特征]。
二、方法分类可分离、正交变换:2D-DFT,2D-DCT,2D-DHT,2D-DWT三、用途1.提取图象特征(如):(1)直流分量:f(某,y)的平均值=F(0,0);(2)目标物边缘:F(u,v)高频分量。
2.图像压缩:正交变换能量集中,对集中(小)部分进行编码。
3.图象增强:低通滤波,平滑噪声;高通滤波,锐化边缘。
4.1连续傅里叶变换(ContinuouFourierTranform)1、一维傅立叶变换及其反变换::1F(u)f(某)ej2u某d某f(某)F(u)ej2u某du4.1.1连续傅里叶变换的定义(DefinitionofContinuouFourierTranform)这里f某是实函数,它的傅里叶变换Fu通F常是复函数。
u的实部、虚部、振幅、能量和相位分别表示如下:实部Ruftco2utdt(4.3)虚部Iuftin2utdt(4.4)振幅1FuR2uI2u2(4.5)4.1.1连续傅里叶变换的定义(DefinitionofContinuouFourierTranform)能量相位EuFuR2uI2u2(4.6)(4.7)傅里叶变换可以很容易推广到二维的情形。
设函数f某,y是连续可积的,且fu,v可积,则存在如下的傅里叶变换对:IuuarctanRu4.1连续傅里叶变换的定义(DefinitionofContinuouFourierTranform)Ff(某,y)F(u,v)f(某,y)ej2u某vyd某dy(4.8)F1F(u,v)f(某,y)F(u,v)ej2u某vydudv(4.9)式中u、v是频率变量。
数字图像处理(MATLAB版)(第2版)
目录分析
1.1数字图像处理的 发展
1.2数字图像的相关 概念
1.3数字图像处理的 内容
1.4数字图像处理的 方法
1
1.5图像数字 化技术
2
1.6图像的统 计特征
3
1.7数字图像 的应用
4
1.8 MATLAB 领略
5 1.9 MATLAB
图像处理应用 实例
小结
习题
1
2.1图像类型 的转换
2
2.2线性系统
数字图像处理(MATLAB版)(第2版)
读书笔记模板
01 思维导图
03 目录分析 05 读书笔记
目录
02 内容摘要 04 作者介绍 06 精彩摘录
思维导图
本书关键字分析思维导图
几何变换
技术
图像
基础
图像
特征
数字图像处理
版
数字图像
内容 小结
数字图像
第版
习题
边界
第章
图像增强
滤波
运算
内容摘要
本书主要内容包括:全书共10章,分别介绍了数字图像的相关论述、数字图像的处理基础、图像编码、图像 复原、图像几何变换、图像频域变换、图像几何变换、小波变换、图像增强、图像分割与边缘检测及图像特征描 述等内容。
10.8形态学重建 10.9特征度量
小结 10.10查表操作
习题
作者介绍
这是《数字图像处理(MATLAB版)(第2版)》的读书笔记模板,暂无该书作者的介绍。
读书笔记
这是《数字图像处理(MATLAB版)(第2版)》的读书笔记模板,可以替换为自己的心得。
精彩摘录
这是《数字图像处理(MATLAB版)(第2版)》的读书笔记模板,可以替换为自己的精彩内容摘录。
数字图像处理及应用(MATLAB)第3章
程序运行结果如图(c)所示。
4.灰度非线性变换 当用某些非线性函数,例如平方、对数、指数函数等作为 映射函数时,可实现图像灰度的非线性变换。灰度的非线性 变换简称非线性变换,是指由这样一个非线性单值函数所确 定的灰度变换。 (1)对数变换 对数变换常用来扩展低值灰度,压缩高值灰度,这样可以使低值灰 度的图像细节更容易看清,从而达到增强的效果。对数非线性变换
[例] 假设一个图像由一个4×4大小的二维数值矩阵构成,如图(a)
所示,试写出图像的灰度分布,并画出图像的直方图。
灰度直方图计算示意图
经过统计图像中灰度值为0的像素有1个,灰度值为1的 像素有1个,…,灰度值为6的像素有1个。由此得到图像的 灰度分布如表所示,由表可得灰度直方图如图(b)所示。 图像的灰度分布
3.1.2 (rk)代表概 率密度函数,并且有下式成立:
nk Pr (rk ) 0 rk 1 n k 0,1,2,l 1
式中nk为图像中出现rk这种灰度的像素数,n是图像中像素 总数,nk/n就是概率论中的频数,l是灰度级的总数目。在直 角坐标系中作出rk与P(rk)的关系图形,就得到直方图
图 不同的图像其直方图却是相同的
图 直方图的叠加性质
由以上可知,尽管直方图不能表示出某灰度级的像素在什么位
置,更不能直接反映出图像内容,但是却能描述该图像的灰度分布
特性,使人们从中得到诸如图像的明亮程度、对比度等,成为一些 处理方法的重要依据。通常一幅均匀量化的自然图像由于其灰度直
方图分布集中在较窄的低值灰度区间,引起图像的细节看不清楚,
(a)反变换关系
(b) 原图 图像反转的效果
(c)变换后的图像
由直线方程截斜式可知当k =-1,b=L-1时,其表达式为:
MATLAB和PowerPoint相结合的数字图像处理教学7页
MATLAB和PowerPoint相结合的数字图像处理教学MATLAB是美国MathWorks公司自20世纪80年代中期推出的数学处理软件,具有优秀的数值计算和卓越的数据可视化能力。
它集成了计算、可视化和编程于一个易用的环境中,在此环境下,问题和解答都表达为我们熟悉的数学符号,是演草纸式的计算工具。
典型的应用有:数学和计算、算法开发、建模,模拟和原形化、数据分析,探索和可视化、科学与工程制图、应用开发,包括图形用户界面的建立等。
MATLAB的基本数据元素是无须定义维数的数组,这让我们能解决很多技术计算的问题,尤其是可以用二维矩阵很好表达的数字图像处理问题,所要花的时间仅仅是用一种标量非交互语言(例如C或Fortran)写一个程序时间的一小部分。
姚锦绣老师在“MATLAB应用在图像处理教学中的探讨”[1]一文中,提出了将MATLAB应用在图像处理教学中的观点,认为引进MATLAB语言可以快速实现模拟仿真,提高教学效率,使学生获得具体生动的印象,凝聚学生的注意力和观察力,激发起求知欲望和兴趣,并结合直方图和阈值分割的教学实例,阐述了MATLAB同数字图像处理教学相结合的优越性。
张国琴老师[2]、孙学岩老师[3]和常靓老师[4]分别撰文阐述MATLAB在数字图像处理教学中的应用,文中利用MATLAB丰富的IPT工具箱功能,例证了MATLAB在数字图像教学中的作用,得到结论:有利于图像处理问题讲解的形象化、具体化,有利于提高学生们的学习兴趣。
彭晓明老师[5]和张博夫老师[6]分别就MATLAB环境下进行数字图像处理实验教学进行了有意义的探讨,尤其是彭晓明老师利用MATLAB设计了由易到难的10组实验题目,涵盖了图像预处理的各个方面。
但是这些文献均缺乏将MATLAB应用于数字图像处理教学的基本框架,缺乏MATLAB同PowerPoint相结合,实现无缝连接方面的阐述。
数字图像处理涉及多门学科:电子信息工程、通信工程、信号与信息处理、计算机应用与软件、工程数学等[7],要想讲解如此众多学科的内在联系,分析图像特征的挖掘、图像处理算法的设计以及算法性能的评测,仅仅靠黑板教学不能满足要求,仅仅凭借多媒体处理软件也无法展现数字图像处理的精髓,均达不到应有的教学效果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/3、图像的几何变换 二、图像镜像
B=imtransform(A,TFORM,method); TFORM=makeform(transformtype,Matrix);%空间变换结 构
Method合法值 ‘bicubic’ ‘bilinear’ ‘nearest’ 含义 双三次插值 双线性插值 最近邻插值
参数transformtype指定了变换的类型,常见的’affine’为二维或 多维仿射变换,包括平移、旋转、比例、拉伸和错切等。 Matrix为相应的仿射变换矩阵。
A=imread('nir.bmp'); [height,width,dim]=size(A); tform=maketform('affine',[-1 0 0;0 1 0;width 0 1]); B=imtransform(A,tform,'nearest'); tform2=maketform('affine',[1 0 0;0 -1 0;0 height 1]); C=imtransform(A,tform2,'nearest'); figure;imshow(A); figure;imshow(B);imwrite(B,'nir水平镜像.bmp'); figure;imshow(C);imwrite(B,'nir垂直镜像.bmp');
原 图 像
直 接 阈 值 分 割 0.25
算 法 分 割
OTSU
Niblack
算 法
算 法
自 动 阈 值 分 割
KittlerMet
Kapur
算 法
/2、图像的点运算
五、直方图均衡化
DMax DB f DA A0
H
i 0
DA
i
[J,T]=histeq(I);%J为输出图像,T为变换矩阵
/2、图像的点运算
三、灰度的Gamma变换
y x esp
其中,x、y的取值范围为[0,1]。esp为补偿系数,r则为Gamma系数。 Gamma变换是根据r的不同取值选择性的增强低灰度区域的对比度 或者高灰度区域的对比度。
J=imadjust(I,[low_in high_in],[low_out high_out],gamma)
I=imread('nir.bmp'); figure;imshow(imadjust(I,[],[],0.75)); %gamma=0.5 title('Gamma 0.5');
原 NIR Gamma 0.5 图 像
四、灰度阈值变换及二值化
BW=im2bw(I,level);%level为人工设定阈值范围为[0 ,1] thresh=graythresh(I);%自动设定所需的最优化阈值
图像易受光照、视角、方位、噪声等的影响。使得同一类图像的不同变形 体之间的差距有时大于该类图像与另一类图像之间的差距,影响图像识别、 分类。图像归一化就是将图像转换到唯一的标准形式以抵抗各种变换,从 而消除同类图像不同变形体之间的外观差异。也称为图像灰度归一化。 原 图 像 及 直 方 图
图像变暗后灰度均衡化
figure;%创建一个新的窗口 figure;subplot(m,n,p);imshow(I);
Subplot(m,n,p)含义为:打开一个有m行n列图像位置的窗口, 并将焦点位于第p个位置上。
/1、图像的读取和显示 四、图像的格式转换
im2bw(I,LEVEL);
阈值法从灰度图、RGB图创建二值图。LEVEL为指定的阈值;(0,1)。
imwrite(A,FILENAME,FMT)
FILENAME参数指定文件名。FMT为保存文件采用的格式。 imwrite(I6,'nirdilatedisk2TTC10373.bmp');
/1、图像的读取和显示 三、图像的显示
imshow(I,[low high])
I为要显示的图像矩阵。[low high]为指定显示灰度图像的灰度范围。 高于high的像素被显示成白色;低于low的像素被显示成黑色;介于 High和low之间的像素被按比例拉伸后显示为各种等级的灰色。 figure;imshow(I6);title('The Main Pass Part of TTC10373');
t c logk s
c为尺度比例常数,s为源灰度值,t为变换后的目标灰 度值。k为常数。灰度的对数变换可以增强一幅图像 中较暗部分的细节,可用来扩展被压缩的高值图像中 的较暗像素。广泛应用于频谱图像的显示中。
Warning:log函数会对输入图像矩阵s中的每个元素进行
操作,但仅能处理double类型的矩阵。而从图像文件中得到的 图像矩阵大多是uint8类型的,故需先进行im2double数据类型 转换。
/4、空间域图像增强
四、中值滤波
中值滤波本质上是一种统计排序滤波器。中值不同于均值,是指排序 队列中位于中间位置的元素的值。中值滤波并非线性滤波器。对于某 些类型的随机噪声具有非常理想的降噪能力。典型的应用就是消除椒 盐噪声。
Gamma 1.5
0 x T f x 255 x T
T为指定阈值
OTSU算法:最大类间方差法自动单阈k算法:局部阈值分割 阈值的计算公式是T = m + k*v,其中m为以该像素点为中心的区域的平 均灰度值,v是该区域的标准差,k是一个系数。 kittlerMet : 表示kittler 最小分类错误(minimum error thresholding)全局二 值化算法。
数字图像处理
浙江大学
/1、图像的读取和显示 /2、图像的点运算
/3、图像的几何变换
/4、空间域图像增强 /5、频率域图像增强 /6、彩色图像处理 /7、形态学图像处理 /8、图像分割 /9、特征提取
/1、图像的读取和显示 一、图像的读取
A=imread(FILENAME,FM T)
FILENAME 指定图像文件的完整路径和文件名。如果在work工作目录下 只需提供文件名。FMT为图像文件的格式对应的标准扩展名。 I_1=imread('D:\10.06.08nir\TTC10377.BMP');%读入图像 二、图像的写入
逆 时 针 度
30
/4、空间域图像增强
一、噪声添加
h=imnoise(I,type,parameters);
type为噪声类型,合法值如下:
‘gaussian’
‘salt&pepper’
高斯白噪声:幅度为高斯分布,功率谱均匀分 布
黑点如胡椒,白点如盐粒。由图像传感器、传 输信道、解码处理、图像切割等产生的黑白相 间的亮暗点噪声。 添 加 椒 盐 噪 声
rgb2gray;从RGB图创建灰度图,存储类型不变。
im2uint8 将图像转换成uint8类型
im2double
将图像转换成double类型
/2、图像的点运算
一、图像直方图 灰度直方图描述了一副图像的灰度级统计信息,主要应用于图像分 割和图像灰度变换等处理过程中。从数学角度来说,图像直方图描述图 像各个灰度级的统计特性,它是图像灰度值的函数,统计一幅图像中各 个灰度级出现的次数或概率。归一化直方图可以直接反映不同灰度级出 现的比率。横坐标为图像中各个像素点的灰度级别,纵坐标表示具有各 个灰度级别的像素在图像中出现的次数或概率。 图像直方图归一化
/3、图像的几何变换 四、图像中心旋转
B=imrotate(A,angle,method,’crop’);
angle为旋转角度,正值为逆时针旋转。可选参数method为imrotate函数 指定插值方法。‘crop’选项会裁减旋转后增大的图像,保持和原图像 同样大小。
A=imread('nir.bmp'); B=imrotate(A,30,'nearest','crop'); figure;imshow(B);imwrite(B,'逆时针中心旋转30度.bmp');
/3、图像的几何变换
I=imread('nir.bmp'); se=translate(strel(1),[180 190]); B=imdilate(I,se); figure;subplot(1,2,1),subimage(I);title('原图像'); subplot(1,2,2),subimage(B);title('平移后图像');
I=imread('nir.bmp');%读入图像 F=fft2(im2double(I));%FFT F=fftshift(F);%FFT频谱平移 F=abs(F); T=log(F+1);%频谱对数变换 figure;imshow(F,[]);title('未经变换的频谱'); figure;imshow(T,[]);title('对数变换后');
imhist(I);%灰度直方图
I=imread(‘red.bmp’);%读入图像 figure;%打开新窗口 [M,N]=size(I);%计算图像大小 [counts,x]=imhist(I,32);%计算有32个小区间的灰度直方图 counts=counts/M/N;%计算归一化灰度直方图各区间的值 stem(x,counts);%绘制归一化直方图
/2、图像的点运算
二、灰度的线性变换
DB f DA f A DA f B
Fa>1时,输出图像的对比度将增大;Fa<1时,输出图像对比度将减小。 Fa=1且Fb非零时,所有像素的灰度值上移或下移,使整个图像更暗或 更亮。Fa<0,暗区变亮,亮区变暗。