matlab画函数图像怎么分析格图比重

如题所述

MATLAB的影像处理工具箱支持多种标准的图像处理操作,以方便用户对图像进行分析和调整。这些图像处理操作主要包括: ①获取像素值及其统计数据; ②分析图像,抽取其主要结构信息; ③调整图像,突出其某些特征或抑制噪声

像素值及其统计
MATLAB的影像处理工具箱提供了多个函数以返回与构成图像的数据值相关的信息,这些函数能够以多种形式返回图像数据的信息,主要包括: ①选定像素的数据值(pixval函数和impixel函数); ②沿图像中某个路径的数据值(improfile函数); ③图像数据的轮廓图(imcontour函数); ④图像数据的柱状图(imhist函数); ⑤图像数据的摘要统计值(mean2函数、std2函数和corr2函数); ⑥图像区域的特征度量(imfeature函数)

像素选择 影像处理工具箱中包含两个函数可返回用户指定的图像像素的颜色数据值。 1) pixval函数 当光标在图像上移动时,该函数以交互的方式显示像素的数据值。另外,该函数还可以显示两个像素之间的Euclidean距离。
2) impixel函数 impixel函数可以返回选中像素或像素集的数据值。用户可以直接将像素坐标作为该函数的输入参数,或用鼠标选中像素。 例:

imshow canoe.tif;
val=impixel
对于索引图像,pixel函数和impixel函数都将其显示为存储在颜色映像中的RGB值而不是索引值。

强度描述图 在MATLAB影像处理工具箱中,提供了improfile函数用于沿着图像中一条直线段路径或直线路径计算并绘制其强度(灰度)值。 例:
imshow debyel.tif;
improfile

imshow canoe.tif;
improfile
例:

RGB=imread('flowers.tif');
figure(1);imshow(RGB);
improfile
图像轮廓图 在灰度图的轮廓图显示时,可利用MATLAB影像处理工具箱中的imcontour函数。该函数类似于contour函数,与contour函数相比,其功能更全。它能够自动设置坐标轴对象,从而使得其方向和纵横比能够与所显示的图形相匹配。 例:
I=imread('rice.tif');
imshow(I);
figure;imcontour(I)

I=imread('rice.png');
imshow(I);
figure;imcontour(I)
图像柱状图 图像柱状图可以用来显示索引图像或灰度图像中的灰度分布。可利用MATLAB影像处理工具箱中的imhist函数创建柱状图。 例:以前面介绍的大米灰度图为例来创建该图的柱状图。其代码如下:
I=imread('rice.tif');
imhist(I,64);

I=imread('rice.png');
imhist(I,64);
图像分析
MATLAB中的图像分析技术可以提取图像的结构信息。例如,可以利用影像处理工具箱提供的edge函数来探测边界。这里所谓的边界,其实就是图像中包含的对象所对应的位置。下面介绍几种常见图像分析函数。 1. 灰度图像的边缘:edge函数 该函数的语法如下:

BW=edge(I,method)
返回与I大小一样的二进制图像BW,其中元素I为发现I中的边缘。method为下列字符串之一: ‘sobel’:缺省值,用导数的sobel近似值检测边缘,那些梯度最大点返回边缘; ‘prewitt’:用导数的prewitt近似值检测边缘,在那些梯度最大点返回边缘; ‘roberts’:用导数的roberts近似值检测边缘,在那些梯度最大点返回边缘; ‘log’:使用高斯滤波器的拉普拉斯运算对I进行滤波,通过寻找0相交检测边缘。 ‘zerocross’:使用指定的滤波器对I滤波后,寻找0相交检测边缘。

BW=edge(I,method,thresh)
用thresh指定灵敏度阈值,所有不强于thresh的边缘都被忽略。

BW=edge(I,method,thresh,direction)
对于’sobel’和’prewitt’方法指定方向; direction为字符串:’horizontal’表示水平方向,’vertical’表示垂直方向,’both’两个方向(缺省值)。

BW=edge(I,’log’,thresh,sigma)
用sigma指定标准偏差。

[BW,thresh]=edge(…)。
行四叉树分解:qtdecomp函数 将一块图像分成四块等大小的方块,然后判断每块是否满足同性质的标准,如果满足,则不再分解,否则,再进行细分成四块,并对每块应用测试标准,分解过程重复迭代下去,直到满足标准,结果可能包含不同大小的块。该函数的语法结构如下:
S=qtdecomp(I)
对灰度图像I进行四叉树分解,返回四叉树结构的稀疏矩阵S。

S=qtdecomp(I,threshold)
如果块中元素最大值减去最小值大于threshold,则分解块。threshold为0到1之间的值。

S=qtdecomp(I,threshold,mindim)
如果块小于mindim就不再分解,无论其符合阈值条件与否

S=qtdecomp(I,threshold,[mindim maxdim])
如果块小于mindim或大于maxdim就不再分解,maxdim/mindim必须为2 的幂。

S=qtdecomp(I,FUN)
使用函数FUN确定是否分解块。

S=qtdecomp(I,FUN,P1,P2,…)
获取四叉树分解块值:qtdgetblk函数 该函数的语法结构如下:
[VALS,R,C]=qtdgetblk(I,S,dim)
VALS中对应dim×dim块的值取代I的四叉树分解中的每个dim×dim块。S由qtdecomp函数返回的稀疏矩阵,包含四叉树结构;VALS是dim×dim×k数组,k是四叉树的分解的dim×dim块的数量。如果没有指定大小的块,则返回一个空矩阵。R和C为包含块左上角行列坐标的向量。

[VALS,IDX]=qtdgetblk(I,S,dim)
返回块左上角直线索引的向量IDX。

设置四叉树分解块值:qtsetblk函数
J=qtsetblk(I,S,dim,VALS)
用VALS中对应dim×dim块的值取代I的四叉树分解中的每个dim×dim块。S由qtdecomp函数返回的稀疏矩阵,包含四叉树结构;VALS是dim×dim×k数组,k是四叉树的分解的dim×dim块的数量。

实例 1)图像分析中的灰度边缘检测实例
%调入与显示RGB图像
*RGB=imread('flowers.tif');
isrgb(RGB);
figure(1);imshow(RGB);

RGB=imread('autumn.tif');
isrgb(RGB);
figure(1);imshow(RGB);

% RGB图像转换为灰度图像
I=rgb2gray(RGB);
figure(2);imshow(I);
colorbar('horiz');
isgray(I);

% 边缘检测
ED=edge(I,'sobel',0.08);
figure(3);imshow(ED);
2) Sobel边界探测器和Canny边界探测器在图像分析中的应用实例 操作的对象仍以前面提到rice.tif图像为例。其代码如下:

I=imread('rice.tif');

I=imread('rice.png');
BW1=edge(I,'sobel');
BW2=edge(I,'canny');
figure(1);imshow(BW1);
figure(2);imshow(BW2);
图像调整
MATLAB中的图像高速技术用于图像的改善。此处的“改善”有两个方面的含义,即:客观方面,例如提高图像的信噪比;主观方面,例如通过修正图像的颜色和强度(灰度)使其某些特征更容易辨识。 1. 对比度增强 在MATLAB中,有关函数有: 1) 对比度调整函数:imadjust函数 该函数可用于调整灰度值或颜色图,其用法为:

J=imadjust(I,[low high],[bottom top],gamma)
将灰度图像I转换为图像J,使值从low到high与从bottom到top相匹配。值大于high或小于low的被剪去,即小于low的值与bottom相匹配,大于high的值与top相匹配。使用该函数时可将[low high]或[bottom top]指定为空矩阵[ ],此时缺省值为[0 1]。Gamma用来指定描述I和J值关系曲线的形状;gamma < 1,越亮输出值越加强;gamma > 1,越亮输出值越减弱;缺省gamma=1,表示线性变换。

newmap=imadjust(map,[low high],[bottom top],gamma)
对索引图像的颜色图进行变换。如果[low high]和[bottom top]均为2×3矩阵,则gamma为1×3向量,imadjust函数分别调整红、绿、蓝成分,调整后的颜色图newmap大小与原来的map一样。

RGB=imadjust(RGB1,…)
对RGB图像RGB1的每个图像块进行调整。与调整颜色图一样,通过指定[low high]和[bottom top]均为2×3矩阵,gamma为1×3向量,对每个图像块可以使用不同的参数值。如果top < bottom,则图像颜色或灰度将倒置,即倒置变换,得到原图的底片。输入图像可以是uint8或双精度类型值,输出图像与输入图像类型一样。

2) 函数:brighten函数 该函数的用法为:brighten(beta) 使现有颜色图变成更亮或更暗的图。如果0 < beta ≤1,则颜色图增亮;-1≤beta < 0,则颜色图变暗。brighten(beta)可以使用brighten(-beta)还原。

MAP=brighten(beta)
返回当前使用的颜色图的更亮或更暗变换后的颜色图MAP,但不改变现有的显示。

NEWMAP=brighten(MAP,beta)
返回指定颜色图MAP的更亮或更暗变换后的新颜色图NEWMAP,但不改变显示。

brighten(FIG,beta)
增强图FIG的所有物体。

3) 直方图调整法 在MATLAB中,histeq函数用直方图均衡增强对比度。直方图均衡通过转换灰度图像亮度值或索引图像的颜色图值来增强图像对比度,输出图像的直方图近似与给定的直方图相匹配。

J=histeq(I,hgram)
转换灰度图像I,使输出图像J的直方图具有length(hgram)个条,近似与hgram相匹配。向量hgram包含等间隔条灰度值的整数计数个数。

J=histeq(I,N)
将灰度图像I转化成具有N个离散灰度级的灰度图像J,N缺省值为64。

[J,T]=histeq(I)
返回灰度级变换,使J的灰度级与I的灰度级相匹配。

NEWMAP=histeq(X,MAP,hgram)
变换索引图像X的颜色图,使索引图像(X,NEWMAP)的灰度级成分与hgram相匹配。返回变换后的颜色图NEWMAP,length(hgram)必须与size(MAP,1)一样。 输入图像可以是uint8或双精度类型。输出颜色图通常为双精度类型。输出T也是双精度类型。

图像平滑 图像平滑主要用于受干扰而质量降低的图像,在MATLAB图像处理工具箱中有关图像噪声的函数有: 1) 向图像增加噪声:imnoise函数 该函数的用法为:
J=imnoise(I,type,…)
向灰度图像I中增加type类型噪声。Type为下列字符串之一: ‘gaussian’:增加GAUSS白噪声; ‘salt & pepper’:增加黑白像素点; ‘speckle’:增加乘法噪声。 根据类型再确定其他参数。

J=imnoise(I, ‘gaussian’,M,V)
在图像I中加入均值为M、方差为V的高斯白噪声。缺省值为0,方差为0.01的噪声。

J=imnoise(I, ‘salt & pepper’,D)
在图像I中加入强度为D的“树盐”黑白像素点。其效果近似于:D*prod(size(I))像素。缺省强度为0.05。

J=imnoise(I, ‘speckle’,V)
使用公式J=I+n*I,向图像I中加入乘法噪声,其中n是均值为0,方差为V的均匀分布随机噪声。V缺省值为0.04。 图像I类型为uint8或双精度值,输出图像J与I类型一致。

2) 二维中值滤波器:medfilt2函数

B=medfilt2(A,[M N])
对矩阵A进行二维中值滤波。每个输出像素包含输入图像中相应像素周期的M×N邻域的中值。在图像边缘添加0,因此边缘在[M N]/2内的点可能发生扭曲。[M N]缺省值为[3 3]。

B=medfilt2(A,’indexed’,…)
将A当作索引图像处理,如果A为uint8类,填补0;如果A为双精度类,则填补1。

3) 状态统计滤波器:ordfilt2函数

Y=ordfilt2(X,order,domain)
由domain中非0元素指定邻域的排序集中的第order个元素代替X中的每个元素。Domain是一个仅包括0和1的矩阵,1仅定义滤波运算的邻域。

Y=ordfilt2(X,order,domain,S)
S与domain一样大,用与domain的非0值相应的S的值作为附加补偿。

4)二维自适应除噪滤波器:wiener2函数 wiener2函数估计每个像素的局部均值与方差,该函数用法如下:

J=wiener2(I,[M N],noise)
使用M×N大小邻域局部图像均值与偏差,采用像素式自适应滤波器对图像I进行滤波。

[J,noise]=wiener2(I,[M N])
滤波前还有估计附加噪声的能量。

特定区域处理
区域的指定
在进行图像处理时,有时只要对图像中某个特定区域进行处理,并不需要对整个图像进行处理。MATLAB中对特定区域的处理是通过二值掩模来实现的,通过选定一个区域后会生成一个与原图大小相同的二值图像,选定的区域为白色,其余部分为黑色。通过掩模图像,就可以实现对特定区域的选择性处理。下面介绍创建区域的方法: 1. 多边形选择方法 roipoly函数用于设定图像中的多边形区域,该函数返回与输入图像大小一致的二值图像BW,选中的区域值为1,其余的部分值为0。其语法格式为:

BW=roipoly(I,c,r)
其功能是:用向量c、r指定多边形各角点的X、Y轴的坐标。

BW=roipoly(I)
其功能是:是让用户交互选择多边形区域,通过点击鼠标设定多边形区域的角点,用空格键和Del键撤销选择,按Enter键确认选择,确认后该函数返回与输入图像大小一致的二值图像BW,在多边形区域内像素值为1,其余区域内像素值为0。

BW=roipoly(x,y,I,xi,yi)
其功能是:是用矢量x、y建立非默认的坐标系,然后在指定的坐标系下选择由向量xi、yi指定的多边形区域。

[BW,xi,yi]=roipoly(…)
其功能是:交互选择多边形区域,并返回多边形角点的坐标。

[x,y,BW,xi,yi]=roipoly(…)
其功能是:交互选择多边形区域后,还返回多边形顶点在指定的坐标系X-Y下的坐标。

例:根据指定的坐标选择一个六边形区域的程序清单:

I=imread('eight.tif');
c=[222 272 300 272 222 194];
r=[21 21 75 121 121 75];
BW=roipoly(I,c,r);
figure(1);imshow(I);
figure(2);imshow(BW);
其他选择方法 MATLAB图像处理工具箱中提供了可以实现按灰度选择区域的函数roicolor函数,其语法格式为:
BW=roicolor(A,low,high)
其功能是:按指定的灰度范围分割图像,返回二值掩模BW,[low,high]为所要选择区域的灰度范围。如果low大于high,则返回为空矩阵。

BW=roicolor(A,v)
其功能是:按向量v中指定的灰度值来选择区域。 下面是一个按灰度分割图像中的目标的程序清单:

I=imread('rice.tif');

I=imread('rice.png');
BW=roicolor(I,128,255);
figure(1);imshow(I);
figure(2);imshow(BW);
特定区域滤波
MATLAB图像处理工具箱中提供的roifilt2函数用于对特定区域进行滤波,其语法格式为:

J=roifilt2(h,I,BW)
其功能是:使用滤波器h对图像I中用二值掩模BW选中的区域滤波。

J=roifilt2(I,BW,fun)
J=roifilt2(I,BW,fun,P1,P2,…)
其功能是:对图像I中用二值掩模BW选中的区域作函数运算fun,其中fun是描述函数运算的字符串,参数为P1、P2、…。返回图像J在选中区域的像素为图像I经fun运算的结果,其余部分的像素值为I的原始值。

例:对指定区域进行锐化滤波的程序清单:

I=imread('eight.tif');
c=[222 272 300 272 222 194];
r=[21 21 75 121 121 75];
BW=roipoly(I,c,r);
h=fspecial('unsharp');
J=roifilt2(h,I,BW);
subplot(1,2,1);imshow(I);
subplot(1,2,2);imshow(J);
由运行结果可知:右上角的硬币发生了变化,而其他硬币保持不变。

特定区域填充
MATLAB图像处理工具箱中提供的roifill函数用于对特定区域进行填充,其语法格式为:

J=roifill(I,c,r)
其功能是:填充由向量c、r指定的多边形,c和r分别为多边形各顶点的X、Y坐标。它是通过解边界的拉普拉斯方程,利用多边形边界的点的灰度平滑的插值得到多边形内部的点。通常可以利用对指定区域的填充来“擦”掉图像中的小块区域。

J=roifill(I)
其功能是:由用户交互选取填充的区域。选择多边形的角点后,按Enter键确认选择,用空格键和Del键表示取消一个选择。

J=roifill(I,BW)
其功能是:用掩模图像BW选择区域。

[J,BW]=roifill(…)
其功能是:在填充区域的同时还返回掩模图像BW。

J=roifill(x,y,I,xi,yi)
[x,y,J,BW,xi,yi]=roifill(…)
其功能是:在指定的坐标系X-Y下填充由向量xi,yi指定的多边形区域。

例:下面是一个为填充指定的区域程序清单:

I=imread('rice.tif');

I=imread('rice.png');
c=[52 72 300 270 221 194];
r=[71 21 75 121 121 75];
J=roifill(I,c,r);
subplot(1,2,1);imshow(I);
subplot(1,2,2);imshow(J);

图形图像文件的读取
图形图像文件操作 相关的函数 已MAT文件加载或保存矩阵数据 Load、save 加载或保存图形文件格式的图像,如BMP、TIFF等 Imread、imwrite 显示加载到MATLAB7.0中的图像 Image、imagesc 信息查询 Imfinfo、ind2rgb

图形图像文件的读取
主要调用格式:

A=imread(filename,fmt) [X,map]=imread(filename,fmt)
[…]=imread(filename) […]=imread(URL, …)
[…]=imread(…,idx) (CUR,ICO,and TIFF only)
[…]=imread(…,idx) (CUR,ICO,and TIFF only)
[…]=imread(…,’frames’,idx) (GIFF only)
[…]=imread(…,ref) (HDF only)
[…]=imread(…,’BackgroundColor’,BG) (PNG only)
[A,map,alpha]=imread(…) (CUR,ICO,and PNG only)
最基本调用格式:

[X,map]=imread(filename,fmt)

*imread('rice.png','5'); %读取rice.png文件的第5帧图像

*RGB=imread(‘earth.jpg’);
%将图像earth.jpg读入MATLAB7.0工作平台,读取数据矩阵为变量RGB
图形图像文件的写入与显示
用imwrite来完成图形图像文件的写人操作: 基本调用格式:imwrite(X,map,filename,fmt)
load clown %根据MAP格式(MATLAB数据文件格式)装载图像
imwrite(X,map,'clown.jpg') %保存为一幅包含小丑图像的JPG文件
可用image函数显示图像,其语法格式:
image(C) image(x,y,C) image(…,’PropertyName’,PropertyValue, …)
image(’PropertyName’,PropertyValue, …) handle=image(…)
函数imagesc与image函数类似,但是它可以自动标度输入数据

load clown %根据MAP格式(MATLAB数据文件格式)装载图像
image(10,10,X) %显示一幅小丑图像,图像的左上角坐标为(0,0)
colormap(map) %
高级图像显示函数imshow,其语法格式为:
imshow(I,n) imshow(I,[low,high]) imshow(BW) imshow(X,map)
imshow(RGB) imshow(…,display_option) imshow(x,y,A, …) imshow filename
h=imshow(…)

I=imread('rice.png')
J=filter2([1 2;-1 -2],I) %用模板[1 2;-1 –2]对图像滤波
imshow(I)
figure,imshow(J,[])
用图像阅读器显示图像
图像阅读器的开关
1.在图像阅览器中显示图像:imview

moonfig=imread('moon.tif');
imview(moonfig)

imview('moon.tif')
指定图像的起始大小 (1) 设置Imviewinitialmaginfication属性为‘fit’,默认值为100,100%显示 (2) 在imview函数中使用Initialmagnification参数,指定值为“fit”。
imshow(X,map,'InitialMaginfication','fit')
关图像阅览器 直接单击窗口下的关闭按钮, 或用下面的语句关闭:imview close all

参考教材: 《数字图像处理及MATLAB实现》余成波编著 重庆大学出版社 TN911.73
温馨提示:答案为网友推荐,仅供参考
相似回答