收藏 分销(赏)

附录A-MATLAB图像处理基础.docx

上传人:仙人****88 文档编号:9460210 上传时间:2025-03-27 格式:DOCX 页数:9 大小:36.30KB 下载积分:10 金币
下载 相关 举报
附录A-MATLAB图像处理基础.docx_第1页
第1页 / 共9页
附录A-MATLAB图像处理基础.docx_第2页
第2页 / 共9页


点击查看更多>>
资源描述
附录A MATLAB图像处理基础 1.图像文件格式及图像类型 (1)MATLAB支持的几种图像文件格式: ① JPEG(Joint Photogyaphic Expeyts Group):联合图像专家组开发,扩展名为jpg或jpeg。特点:压缩比可调;存储效率高;图像质量较高;适合WEB图片的存储与传输。 ② BMP(Windows Bitmap):是Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序所支持。特点:包含的图像信息较丰富,几乎不进行压缩,导致占用磁盘空间过大。所以,目前BMP在单机上比较流行。 ③ GIF(Graphics Interchange Format):图形交换格式,由CompuServe公司针对网络传输带宽限制于1987年开发,用于交流和传输图片。 特点:压缩比高;存储效率高;多幅静止图像形成连续动画;色深最大为8位;图像最大不超过64M;支持渐显方式。 ④ TIFF(Tagged Iamge File Format):由Aldus和微软联合开发,出于跨平台存储扫描图像需要而设计,广泛用于印刷业。特点:图像格式复杂;存储信息完备;图像质量高;可扩展、方便和可修改;读写速度慢。 ⑤ PNG(Portable Network Graphics):便携网络图形格式,于1996年10月1日获准推荐认可标准。特点:目前保证最不失真的图像格式;吸取GIF和JPEG的优点,存储形式丰富;极限压缩比例的同时保证图像质量;显示速度快;支持透明图像制作;缺点是不支持动画。 另有PCX、HDF、ICO、CUR、XWD、RAS、PBM、PGM等文件格式。 (2)MATLAB支持五种图像类型,有关它们的定义见表1。 表1 图像类型及其对应的像素数据类型 图像类型 Double数据 uint8和uint16数据 二值图像 图像为m×n的整数矩阵,元素值范围[0,1] 图像为m×n的整数矩阵,元素值范围[0,1] 索引图像 图像为m×n的整数矩阵,元素值范围[0,p] 图像为m×n的整数矩阵,元素值范围[0,p-1] 灰度图像 图像为m×n的浮点数矩阵,元素值范围[0,1] 图像为m×n的整数矩阵,元素值范围[0,255]或[0,65535] RGB图像 图像为m×n×3的浮点数矩阵,元素值范围[0,1] 图像为m×n×3的整数矩阵,元素值范围[0,255]或[0,65535] 2.图像类型判断及转换 (1)在MATLAB中如果要判断一个图像文件的类型,可使用如下指令: isbw:若图像为二值图像,则返回真。 isgray:若图像为灰度图像,则返回真。 isind:若图像为索引图像,则返回真。 isrgb:若图像为RGB图像,则返回真。 (2)在MATLAB系统中,要将一个类型的图像文件转换成另一个类型,只需将前一个文件的图像数据用imread读出,再用imwrite以适当的格式写到后一个图像文件中去即可。MATLAB提供了用于图像类型的转换的若干函数: dither: 用抖动法(dithering)转换图像。 gray2ind: 灰度图像或二值图像向索引图像转换。 grayslice: 设定阈值将灰度图像转换为索引图像。 im2bw: 设定阈值将灰度、索引、RGB图像转换为二值图像。 im2double:将图像数组转换为double型。 im2uint8: 将图像数组转换为uint8型。 im2uint16:将图像数组转换为uint16型。不支持二值图像序列的转换。 ind2gray: 索引图像向灰度图像转换。 ind2rgb: 索引图像向RGB图像转换。 mat2gray: 将一个数据矩阵转换为灰度图像。 rgb2gray: RGB图像向灰度图像转换或将彩色色图转换成灰度色图。 rgb2ind: RGB图像向索引图像转换。 im2java: 一般图像向Java图像转换。 label2rgb: 标志图像向RGB图像转换。 3. 基本图像处理函数 clear: 清空内存中的变量; close all: 关闭所有的图形视窗 figure: 强制生成一个新的个绘图窗口; axis([xmin xmax ymin ymax ...]):设置坐标轴显示范围 imread 功能:从图形文件中读取图像。 语法: [X,map] = imread(filename.fmt) […] = imread(filename) […] = imread(URL,…) […] = imread(…,idx) (CUR,ICO and TIFF only) […] = imread(…,’frames’,idx) (GIF only) […] = imread(…,ref) (HDF only) […] = imread(…,’BackgroundColor’,BG) (PNG only) [A,map,alpha] = imread(…) (ICO,CUR and PNG only) 举例: [X,map] = imread('flowers.tif',6); imwrite 功能:把图像写入图形文件中。 语法: imwrite(A,filename,fmt) imwrite(X,map,filename,fmt) imwrite(...,filename) imwrite(...,Param1,Val1,Param2,Val2...) 其中imwrite(…,Param1,Val1,Param2,Val2…)可以让用户控制HDF、JPEG、TIFF等一些图像文件格式的输出特性。在MATLAB中,默认的保存类型是uint8。由于PNG和TIFF格式支持16位的图像,所以保存这类图像时,保存类型就是uint16。 举例 imwrite(X,map,'flowers.hdf','Compression','none','WriteMode','append') figure 功能:创建图形窗口。 语法: figure figure('PropertyName',PropertyValue,...) figure(h) h = figure(...) subplot 功能:分割图形窗口。 语法: subplot(m,n,p) subplot(m,n,p,'replace') subplot(m,n,p,'align') subplot(h) subplot('Position',[left bottom width height]) h = subplot(...) imshow 功能:显示图像。 语法: l imshow filename:显示图像文件。 l imshow(BW): 显示二值图像,BW为黑白二值图像矩阵。 l imshow(X,map): 显示索引图像,X为索引图像矩阵,map为色彩图示。 l imshow(I):显示灰度图像,I为二值图像矩阵。 l imshow(RGB):显示RGB图像,RGB为RGB图像矩阵。 l imshow(I,[low high]):将非图像数据显示为图像,这需要考虑数据是否超出了所显示类型的最大允许范围,其中[low high]用于定义待显示数据的范围。 imhist 功能:显示图像数据的柱状图。 语法: imhist(I,n) imhist(X,map) [counts,x] = imhist(...) 举例 I = imread('pout.tif'); imhist(I) histeq 功能:用柱状图均等化增强对比。 语法: J = histeq(I,hgram) J = histeq(I,n) [J,T] = histeq(I,...) 举例 I = imread('tire.tif'); J = histeq(I); imshow(I) figure, imshow(J) imnoise 功能:增加图像的渲染效果。 语法: J = imnoise(I,type) J = imnoise(I,type,parameters) 举例: I = imread('eight.tif'); J = imnoise(I,'salt & pepper',0.02); medfilt 功能:进行二维中值过滤。 语法: B = medfilt2(A,[m n]) B = medfilt2(A) B = medfilt2(A,'indexed',...) edge 功能:识别强度图像中的边界。 语法: BW = edge(I,'sobel') BW = edge(I,'sobel',thresh) BW = edge(I,'sobel',thresh,direction) [BW,thresh] = edge(I,'sobel',...) BW = edge(I,'prewitt') BW = edge(I,'prewitt',thresh) BW = edge(I,'prewitt',thresh,direction) [BW,thresh] = edge(I,'prewitt',...) BW = edge(I,'roberts') BW = edge(I,'roberts',thresh) [BW,thresh] = edge(I,'roberts',...) BW = edge(I,'log') BW = edge(I,'log',thresh) BW = edge(I,'log',thresh,sigma) [BW,threshold] = edge(I,'log',...) BW = edge(I,'zerocross',thresh,h) [BW,thresh] = edge(I,'zerocross',...) BW = edge(I,'canny') BW = edge(I,'canny',thresh) BW = edge(I,'canny',thresh,sigma) [BW,threshold] = edge(I,'canny',...) imresize 功能:改变图像大小。 语法: B = imresize(A,m,method) B = imresize(A,[mrows ncols],method) B = imresize(...,method,n) B = imresize(...,method,h) imrotate 功能:旋转图像。 语法: B = imrotate(A,angle,method) B = imrotate(A,angle,method,'crop') 举例 I = imread('ic.tif'); J = imrotate(I,–4,'bilinear','crop'); imshow(I) figure, imshow(J) 其它相关函数请参考Matlab的帮助系统。 编程中常用的matlab函数 实验中可能用到的matlab函数简介如下,更详细的内容可以查看matlab的帮助文档。 (1)图象读取 将图象读入matlab中成为二维数组(灰度图)或三维数组(RGB彩色图)。 格式为 I = imread (FILENAME, FMT) 例如 I = imread ('mypicture', 'bmp'); 或 I = imread ('mypicture.bmp'); 或 I = imread ('e:\mypath\mypicture.bmp'); 注意图象文件名和图象格式参数都必须用单引号括起,如果图象不在当前目录,则图象文件名必须包括完整的路径。图象格式可以为'bmp','jpg'等,详细参见matlab的帮助。 (2)图象写入 将二维数组(灰度)或三维数组(RGB彩色)作为图象数据写入图象文件中。 格式为 imwrite (A, FILENAME, FMT) 例如 imwrite (A, 'mypicture', 'jpg'); 或 imwrite (A, 'mypicture.jpg'); 或 imwrite (A, 'e:\mypath\mypicture.jpg'); 参数格式问题同imread函数 (3)数据精度的改变 uint8(A),将A转化为8位无符号整数,图象数据多为此数据格式 double(A)和single(A),将A转化为双精度浮点数和单精度浮点数,这里占8字节和4字节,matlab的大多数函数只支持这两种精度的数,而double更常用。运算前必须将uint8型数据转化为double型,而储存或显示时必须注意数据格式。 (4)图象显示 imshow(A),将数组作为图象显示,默认以256级灰度显示。 注意,在matlab中,如果A是uint8数据,则灰度有效值0~255;如果A是double数据,则灰度有效值0~1,大于1均视为1,小于0均视为0。故显示时必须注意图象格式,如果有效值在0~255,则显示时需使用uint8函数加以转换。 (5)彩色图象至灰度图象的转化 一般所获得的图象多为RGB彩色图象(即使其中只有灰度信息),故处理时需加以转化。 格式为 I = RGB2GRAY(RGB) RGB为代表彩色图象的三维数组,I为相应的代表灰度的二维数组。 (1)fft2 F = fft2(X); 求X的二维快速傅立叶变换F,F的尺寸与X相同。 F = fft2(X, M, N); 求X的二维快速傅立叶变换F,F为M行N列。 (2)ifft2 X = ifft2(F); 求F的二维快速傅立叶逆变换X,X的尺寸与F相同。 X = iffft2(F, M, N); 求F的二维快速傅立叶逆变换X,X为M行N列 (3)fftshift X2 = fftshift(X1); 将直流移位到频谱中心,可以用于一维或二维的情况。 (4)ifftshift X1 = ifftshift(X2); fftshift的逆操作,可以用于一维或二维的情况。 (5)abs 求复数的幅值,对于实数则求绝对值。 (6)angle 求复数的相位角。 matlab的二维滤波器函数filter2 // g = filter2(P,f),P是模板系数。 3.空域平滑滤波(模糊、去噪) clear all; close all I = imread('eight.tif'); h1 = ones(3,3) / 9; h2 = ones(5,5) / 25; I1 = imfilter(I,h1); I2 = imfilter(I,h2); subplot(2,2,1), imshow(J1) , title('gaussian'); 对J1进行中值滤波 K3 = medfilt2(J1,[3 3]); histeq()--直方图均衡 imnoise()--给图像加噪声 medfilt2()--中值滤波 mean2()--求图像的均值 dct2()--对图像进行2维DCT变换 算法流程: 图象线性空域滤波算法流程: 1) 读取图象f; 2) 确定图象大小M×N; 3) 滤波结果图象g = zeros(M, N),与原图象相同; 4) 确定模板大小m×n(2a+1,2b+1),及其系数w; 5) for x = (a+1) to (M-a) // 对图象内每个象素滤波。边界不处理,保持为0 for y = (b+1) to (N-b) end end // 一个更简单的方法是利用matlab的二维滤波器函数filter2 // g = filter2(P,f),P是模板系数。 另:为方便操作,将图象读入后,转化为double型,并除以255,这样转化为[0,1]之间double型,之后显示和存储都采用该格式。 f = imread('×××.×××'); f = double(f)/255; 图像恢复算法流程 全滤波: (1)求退化图象g(x,y)的傅立叶变换G(u,v) (2)设置退化函数H(u,v) // 注意尺寸与G(u,v)相同 (3)计算F(u,v) = G(u,v)/H(u,v) (4)计算F(u,v)的傅立叶逆变换,得到恢复图象f(x,y) // 取实部即可 限制频带的逆滤波: (1)求G(u,v) (2)设置退化函数H(u,v) (3)设置低通函数B(u,v) (4)计算 F(u,v) = G(u,v)B(u,v)/H(u,v) (5)计算F(u,v)的傅立叶逆变换,得到恢复图象f(x,y) 基本全局门限 基本全局门限方法是通过一种试探性的方法确定门限的。算法如下: 1)选择一个门限的初始估计值T; 2)用T分割图象。生成两组象素:G1由所有灰度大于T的象素组成,而G2由所有灰度小于T的象素组成; 3)对区域G1和G2中所有象素计算灰度平均值和; 4)计算新的门限值: 5)重复步骤2到4,直到逐次迭代所得的T值之差小于事先定义的参数T 0; 6)根据选择的门限对图象进行标记。 其他函数 conv2 函数 功能:计算二维卷积 rgb2gray 将一副真彩色图像转换成灰度图像
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服