35
[email protected] Digital Image Processing Matlab 应应应应应应

Matlab 应用图像处理

  • Upload
    gram

  • View
    115

  • Download
    4

Embed Size (px)

DESCRIPTION

Matlab 应用图像处理. Matlaby 基本知识. Matlaby 图像文件格式 BMP(Windows Bitmap) Windows 通用文件格式 JPEG(Joint Photographic Experts Group) 高度压缩的图像文件格式 TIFF(Tagged Image File Format) 主要适用于排版印刷 PCX(Windows Paintbrush) PNG(Portable Network Graphics) HDF(Hierarchical Data Format) XWD(X Windows Dump) - PowerPoint PPT Presentation

Citation preview

Page 1: Matlab 应用图像处理

[email protected] 1Digital Image Processing

Matlab 应用图像处理

Page 2: Matlab 应用图像处理

[email protected] 2Digital Image Processing

Matlaby 基本知识 Matlaby 图像文件格式

» BMP(Windows Bitmap)– Windows 通用文件格式

» JPEG(Joint Photographic Experts Group)– 高度压缩的图像文件格式

» TIFF(Tagged Image File Format)– 主要适用于排版印刷

» PCX(Windows Paintbrush)» PNG(Portable Network Graphics)» HDF(Hierarchical Data Format)» XWD(X Windows Dump)» GIF(Graphics Interchange Format)

Page 3: Matlab 应用图像处理

[email protected] 3Digital Image Processing

Matlab 基本知识 Matlab 图像类型

» 索引图像– 直接把像素值作为 RGB 调色板下标的图像。包括一个数据矩阵及

一个颜色映像矩阵。» 灰度图像

– 是包含灰度级(量度)的图像。仅包含一个数据矩阵,其中数据矩阵中的每一个数据代表了一定范围内的灰度值。( 0~255 )

» RGB 图像– 真彩图像。用 RGB 三原色表示图像色彩信息。

» 二进制图像– 显示黑、白信息的图像。每一个像素值由三个数值来指定红、绿和

蓝颜色分量。需要一个数据矩阵,每个像素只取两个灰度值。

Page 4: Matlab 应用图像处理

[email protected] 4Digital Image Processing

图像示例

Page 5: Matlab 应用图像处理

[email protected] 5Digital Image Processing

图像文件读取 函数 imread 可以从任何 Matlab 支持的图像文件格式中以任意位

深度读取一幅图像。 [X,MAP]=imread(Filename,’FMT’)

» Filename: 读入的文件名。» FMT 为图像格式,如果不指定 FMT 参数,系统将根据文件名

自动判断图像类型。» 输出参数 X :存储图像数据的矩阵名。» MAP: 当图像为索引图像时, MAP 为该图像的调色板。

Example:» RGB=imread(‘flowers.tif’)» I=imread(‘moon.tif’)» [X,map]=imread(‘canoe.tif’)

Page 6: Matlab 应用图像处理

[email protected] 6Digital Image Processing

图像文件的写入(保存) 函数 imwrite 可以将一幅图像写成一个 Matlab 支持的格式图像文

件。 Imwrite(X,MAP,Filename,’FMT’)

» X: 图像变量名» MAP: 调色板» Filename: 输出文件名» FMT: 指定的存储格式

Example:» Imwrite(I,’Test.bmp’)» Imwrite(I,’clown.png’,’BitDepth’,4)

Page 7: Matlab 应用图像处理

[email protected] 7Digital Image Processing

图像文件的显示 函数 imshow 可以自动对读入的图像进行调整显示,以获得最佳的

显示效果。 Imshow(I,[low high])

» I: 待显示的图像» [low high]: 图像数据的值域

显示灰度图像» Imshow(I,[100 200])

显示二值图像» Imshow(BW)

显示索引图像» Imshow(X,map)

显示真彩图像» Inshow(RGB)

Page 8: Matlab 应用图像处理

[email protected] 8Digital Image Processing

图像显示举例 Example:

» BW1=zeors(20,20);» BW1(2:2:18,2:2:18)=1;» Imshow(BW1,’notruesize’);» Imshow(~BW1,’ notruesize’);» Imshow(I,[100,200]);

利用不同的窗体显示图像» Figure; Imshow(~BW1,’ notruesize’);

Page 9: Matlab 应用图像处理

[email protected] 9Digital Image Processing

图像增强 - 直方图处理

直方图显示函数» Imhist(I,level)» I: 图像矩阵» Level: 灰度级数

直方图均衡函数» Histeq(I)» I: 待均衡的图像矩阵

Page 10: Matlab 应用图像处理

[email protected] 10Digital Image Processing

直方图均衡举例 I=imread(‘tire.tif’);

» 读取图像 J=histeq(I);

» 直方图均衡图像 Imshow(I);

» 显示原图像 Figure,imshow(J); Figure,imshow(I,64);

» 显示图像的直方图 Figure,imshow(J,64);

Page 11: Matlab 应用图像处理

[email protected] 11Digital Image Processing

心血管造影(图像剪影) Orgin=imread(‘orgin.bmp’); Mask=imread(‘mask.bmp’); Result=imsubtract(orgin,mask); Figure,imshow(orgin); Figure,imshow(result);

Page 12: Matlab 应用图像处理

[email protected] 12Digital Image Processing

图像求反运算[m,n]=size(orgin);orgintemp=double(orgin);for i=1:m % 转换矩阵的每个像素 for j=1:n f=orgintemp(i,j); g(i,j)=0; if(f>=0)&(f<=255) g(i,j)=y-k*f; else g(i,j)=0; end endEndfigure;imshow(mat2gray(g));

Page 13: Matlab 应用图像处理

[email protected] 13Digital Image Processing

图像的插值缩放 通过函数 imresize 来实现对图像的放大和缩小。 插值方法可以采用

» 最近邻域插值 (Nearest neighbor interpolation)» 双线性插值 (Bilinear interpolation)» 双三次插值 (Bicubic interpolation)

B=imresize(A,m,method)» A: 原图像矩阵» M: 放大倍数。

– M>1 放大– M<1 缩小

» Method: 插值方法 Example:

» I1=imsize(I,1.5,’nearest’);

Page 14: Matlab 应用图像处理

[email protected] 14Digital Image Processing

图像缩放实例 I=imread(‘zoom.bmp’); Imshow(I); I1=imresize(I,2,'bilinear'); figure,imshow(I1); I2=imresize(I,2,'bicubic'); figure,imshow(I2); I3=imresize(I,2,'nearest'); figure,imshow(I3);

Page 15: Matlab 应用图像处理

[email protected] 15Digital Image Processing

图像的插值旋转 通过函数 imrotate 来实现对图像的放大和缩小。 插值方法可以采用

» 最近邻域插值 (Nearest neighbor interpolation)» 双线性插值 (Bilinear interpolation)» 双三次插值 (Bicubic interpolation)

B= imrotate(A,angle,method)» A: 原图像矩阵» angle : 旋转角度。» Method: 插值方法

– 默认的插值方法为 Nearest

Example:» I1=imsize(I,30,’nearest’);

Page 16: Matlab 应用图像处理

[email protected] 16Digital Image Processing

图像插值旋转实例 I4=imrotate(I,30,'nearest'); figure,imshow(I4); I5=imrotate(I,30,'bilinear'); figure,imshow(I5); I6=imrotate(I,30,'bicubic'); figure,imshow(I6);

origin nearest bilinear bicubic

Page 17: Matlab 应用图像处理

[email protected] 17Digital Image Processing

空域滤波增强 平滑滤波器

» K=filter2(fspecial(‘average’,3),I)/255;– fspecial(‘average’,3): 用来创建 3x3 的均值滤波器– Fspecial(h,I): 滤波函数– I: 原图像矩阵

中值滤波器» K=medfilt2(I,[3,3]);

– Medfilt2 :中值滤波器– I: 原图像矩阵– [3,3]: 窗宽

Page 18: Matlab 应用图像处理

[email protected] 18Digital Image Processing

空域均值滤波增强实例 N3=filter2(fspecial('average',3),I)/255; figure,imshow(N3); N5=filter2(fspecial('average',5),I)/255; figure,imshow(N5); N7=filter2(fspecial('average',7),I)/255; figure,imshow(N7);

Origin 3x3 5x5 7x7

Page 19: Matlab 应用图像处理

[email protected] 19Digital Image Processing

空域中值滤波增强实例 K3=medfilt2(K,[3,3]); figure,imshow(K3); K5=medfilt2(K,[5,5]); figure,imshow(K5); M3=filter2(fspecial('average',3),K)/255; figure,imshow(M3);

origin 3x3 Median 5x5 Median

3x3 Average

Page 20: Matlab 应用图像处理

[email protected] 20Digital Image Processing

傅里叶变换及实现 Matlib 函数 fft 、 fft2 、 fftn 分别可以实现一维、二维和 N 维

DFT 快速傅里叶变化算法。 函数 ifft 、 ifft2 、 ifftn 则用来计算反 DFT ,它们是以需要进行反

变换的图像作为输入参数,计算得到输出图像。 A=fft(X,N,DIM)

» X: 输入图像» N: 采样间隔点» DIM: 进行离散傅里叶变化的维数

A=fft2(X,MROWS,NCOLS)» X: 输入图像» MROWS: 采样行数» NCOLS: 采样列数

O=fftshift(A)» A:fft 变换后的矩阵

Page 21: Matlab 应用图像处理

[email protected] 21Digital Image Processing

FFT 变换实例 % 创建图像 f=zeros(30,30); f(5:24,13:17)=1; imshow(f,'notruesize'); %fft 变换 F=fft2(f); F2=log(abs(F)); figure,imshow(F2,[-1,5],'notruesize'); % 加入伪彩显示 colormap(jet); % 等间隔采样变换 FM=fft2(f,256,256); FM2=log(abs(FM)); figure,imshow(FM2,[-1,5],'notruesize'); colormap(jet);

Page 22: Matlab 应用图像处理

[email protected] 22Digital Image Processing

FFT 变换实例 % 坐标轴平移 OF=fftshift(FM); OF2=log(abs(OF)); figure,imshow(OF2,[-1,5],'notruesize'); colormap(jet); % 图片保存 imwrite(OF2,'C:\004.bmp');

Page 23: Matlab 应用图像处理

[email protected] 23Digital Image Processing

Matlab 预定义滤波器 可以调用 fspecial 创建 Matlab 预定义的滤波器

» h= fspecial(‘type’,parameters)

type parameters 说明gaussian Hsize,sigma 标准差为 sigma 、大小为 hsize 的高斯低通滤

波器sobel 无 近似计算垂直梯度光滑效应的水平边缘算子prewitt 无 近似计算垂直梯度水平边缘算子laplacian alpha 系数由 alpha(0.0~1.0) 决定的二维拉普拉斯

算子log Hsize,sigma 标准差为 sigma 、大小为 hsize 的高斯滤波旋

转对称拉氏算子average hsize 均值滤波disk radius 有 (radius*2+1) 个边的圆形均值滤波器motion Len,theta 按照角度 theta 移动 len 个像素的运动滤波器

Page 24: Matlab 应用图像处理

[email protected] 24Digital Image Processing

频率变换方式 I=imread(‘c:\wiener.bmp’); Imshow(I); % 构造一个权值全部为 1 的 5X5 滤波器进行均值滤波 H=ones(5,5)/25; I2=imfilter(I,H); Figure,imshow(I2); % 可利用彩色增强 rgb=imread(‘rgb.bmp’); Imshow(rgb); % 构造一个权值全部为 1 的 5X5 滤波器进行均值滤波 H=ones(5,5)/25; rgb2=imfilter(rgb,H); Figure,imshow(rgb2);

Page 25: Matlab 应用图像处理

[email protected] 25Digital Image Processing

Wiener 滤波 对图像进行魏纳滤波主要是消除图像中存在的噪声。利用 Matlib

的 wiener2 函数可对一幅图像进行自适应魏纳滤波。 J=wiener2(I,[M,N],NOISE)

» I: 输入图像» [M,N]: 表示卷积使用的邻域大小,缺省为 [3,3]。» NOISE:噪声强度,如果不指定, wiener2返回一个估计的噪声强度

Page 26: Matlab 应用图像处理

[email protected] 26Digital Image Processing

Wiener 滤波实例 I=imread('C:\wiener.bmp'); Imshow(I); %施加高斯噪声 J=imnoise(I,'gaussian',0,0.005); figure,imshow(J); %Wiener 滤波 K=wiener2(J,[5 5]); figure,imshow(K);

Page 27: Matlab 应用图像处理

[email protected] 27Digital Image Processing

Radon 变化 Radon 变化类似于 Hough 变化,用于检测图像中的直线 [R xp]=radon(I,theta,N)

» I :需变换的图像» Theta: 需变换的角度» N: 指定变换的点数(缺省)» Xp: 沿 X 轴的坐标

Page 28: Matlab 应用图像处理

[email protected] 28Digital Image Processing

Radon 变化实例 I=imread(‘radon.bmp’); imshow(I); %提取物体的轮廓边缘 BW=edge(I); Figure,imshow(BW) % 计算图像的 Radon 变换 Theta=1:179 % 变换的角度范围 [R,xp]=radon(BW,theta); figure,imagesc(theta,xp,R);

Page 29: Matlab 应用图像处理

[email protected] 29Digital Image Processing

Radon 逆变换 Radon逆变换可以根据投影数据重建图像,在 X 射线断层分析中常常使用。

R=radon(I,theta); IR=iradon(R,theta);

Page 30: Matlab 应用图像处理

[email protected] 30Digital Image Processing

图像复原—模糊及噪声 I=imread(‘noise.bmp’); % 采用运动滤波 PSF 进行模糊 H=fspecial(‘motion’,50,45); MotionBlur=imfilter(I,H); Figure,imshow(MotionBlur); % 采用均值滤波 PSF 进行模糊 H=fspecial(‘disk’,10); AverageBlur=imfilter(I,H); Figure,imshow(AverageBlur); %噪声的添加 V=.02; Noisy=imnoise(I,’gaussian’,0,V); Figure,imshow(Noisy);

Page 31: Matlab 应用图像处理

[email protected] 31Digital Image Processing

图像复原—模糊及噪声 (图 )

Page 32: Matlab 应用图像处理

[email protected] 32Digital Image Processing

图像复原—魏纳滤波复原 通过调用 deconvwnr 函数可以利用魏纳滤波方法对图像进行复原处理。当图像的频率特性和噪声已知时,效果非常好。

J= deconvwnr(I,PSF,NCORR,ICORR) J= deconvwnr(I,PSF,NSR)

» I: 输入图像» PSF: 点扩散函数» 缺省参数

– NSR: 信噪比(默认 0 )– NCORR:噪声的自相关函数– ICORR: 原始图像的自相关函数

Page 33: Matlab 应用图像处理

[email protected] 33Digital Image Processing

魏纳滤波复原实例 Blurred=imread(‘blure.bmp’); % 构造 PSF模型 Len=31; Theta=11; PSF=fspecial(‘motion’,Len,Theta); Wnr1=deconvwnr(Blurred,PSF); figure,imshow(wnr1); % 不正确的 PSF模型(通常 PSF未知) Wnr2=deconvwnr(Blurred, fspecial(‘motion’,2*Len,Theta)); Figure,imshow(wnr2); Wnr3=deconvwnr(Blurred, fspecial(‘motion’, Len,2*Theta)); Figure,imshow(wnr3);

Page 34: Matlab 应用图像处理

[email protected] 34Digital Image Processing

边缘检测 可以使用 Matlab 的 edge 函数进行边缘检测。 Edge 可以提供许多微分算子模板,指定其是对水平边缘还是垂直边缘敏感。 ddge函数在边缘检测时还可以指定一个域值 ,只有满足这个域值的点才作为边缘点。

Bw=EDGE(I,’type’,parmeter)» I: 输入图像» Type: 算子类型» Parmeter:与算子有关的具体参数

Example» BW=edge(I,’Sobel’,THRESH,DIRECTION)

Page 35: Matlab 应用图像处理

[email protected] 35Digital Image Processing

边缘检测实例 I=imread(edge.bmp); BW1=edge(I,’sobel’); BW2=edge(I,’canny’); Figure,imshow(BW1); Figure,imshow(BW2);