如何用matlab绘制函数图像分析晶格的比重
像素值及其统计
MATLAB的图像处理工具箱提供了几个函数来返回与图像的数据值相关的信息,可以以多种形式返回图像数据的信息,主要包括:①所选像素的数据值(pixval函数和impixel函数);②图像中沿路径的数据值(improfile函数);③图像数据的等高线图(imcontour函数);④图像数据直方图(imhist函数);⑤图像数据汇总统计(mean2函数、std2函数、corr2函数);⑥图像区域的特征度量(imfeature函数)
像素选择图像处理工具箱包含两个函数,可以返回用户指定的图像像素的颜色数据值。1) pixval函数当光标在图像上移动时,该函数以交互的方式显示像素的数据值。此外,该功能还可以显示两个像素之间的欧氏距离。
2) impixel函数impixel函数可以返回所选像素或像素集的数据值。用户可以直接使用像素坐标作为该函数的输入参数,也可以用鼠标选择像素。示例:
imshow canoe.tif
val = impixel
对于索引图像,pixel函数和impixel函数都将它们显示为存储在彩色图像中的RGB值,而不是索引值。
亮度描述图在MATLAB图像处理工具箱中,提供了improfile函数,用于计算并绘制图像中沿直线段路径或直线路径的亮度(灰度)值。示例:
im show deb Yel . TIF;
即兴表演
imshow canoe.tif
即兴表演
示例:
RGB = im read(' flowers . TIF ');
图(1);imshow(RGB);
即兴表演
在灰度图中显示图像等高线图时,可以使用MATLAB图像处理工具箱中的imcontour函数。这个函数类似于轮廓函数,比轮廓函数功能更多。它可以自动设置坐标轴对象,使其方向和长宽比与显示的图形相匹配。示例:
I = im read(' rice . TIF ');
imshow(一);
图;等值线图(一)
I = im read(' rice . png ');
imshow(一);
图;等值线图(一)
图像直方图图像直方图可用于显示索引图像或灰度图像中的灰度分布。利用MATLAB图像处理工具箱中的imhist函数可以创建直方图。示例:以大米的灰度地图为例,创建地图的直方图。其代码如下:
I = im read(' rice . TIF ');
imhist(I,64);
I = im read(' rice . png ');
imhist(I,64);
映象分析
MATLAB中的图像分析技术可以提取图像的结构信息。例如,由图像处理工具箱提供的边缘函数可以用于检测边界。这里所谓的边界,其实就是图像中包含的物体的位置。以下是一些常见的图像分析功能。1.灰度图像的边缘:边缘函数该函数的语法如下:
BW=edge(I,方法)
返回与I大小相同的二进制图像BW,其中元素I是discovery i中的边缘,Method是以下字符串之一:' sobel ':默认值,导数的Sobel近似用于检测边缘,那些梯度最大的点返回边缘;‘Prewitt’:利用导数的Prewitt近似来检测边缘,并且返回在那些具有最大梯度的点处的边缘;‘Roberts’:用导数的Roberts近似来检测边缘,并在那些具有最大梯度的点处返回边缘;' Log ':通过高斯滤波器的拉普拉斯运算对I进行滤波,通过寻找零交点来检测边缘。‘零交叉’:在用指定的过滤器过滤I之后,找到零交叉检测边缘。
BW=edge(I,方法,阈值)
Thresh用于指定灵敏度阈值,所有不超过thresh的边缘都将被忽略。
BW=edge(I,方法,阈值,方向)
指定“sobel”和“prewitt”方法的方向;Direction是一个字符串:“水平”表示水平方向,“垂直”表示垂直方向,“两者”是两个方向(默认值)。
BW=edge(I,' log ',thresh,sigma)
用sigma指定标准偏差。
[BW,thresh]=edge(…)。
行四叉树分解:qtdecomp函数将一幅图像分成四个大小相同的块,然后判断每个块是否满足相同的标准。如果有,就不分解,否则再细分成四个块,每个块都应用测试标准。分解过程会一直重复,直到符合标准,结果可能包含大小不一的块。该函数的语法结构如下:
s = Qt decop(I)
对灰度图像I进行四叉树分解,返回四叉树结构的稀疏矩阵S。
s = Qt decop(I,阈值)
如果块中元素的最大值减去最小值大于阈值,则分解该块。阈值是介于0和1之间的值。
s = Qt decop(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块对应的值替换qtdecomp函数返回的I. S稀疏矩阵的四叉树分解中的每个dim×dim块,包括四叉树结构;VALS是dim×dim×k的数组,K是四叉树分解的dim×dim块的个数。如果没有指定大小的块,则返回一个空矩阵。r和c是包含块左上角的行和列坐标的向量。
[IDX VALS]= qtdgetblk(I,S,dim)
返回块左上角直线索引的矢量IDX。
设置四叉树分解块值:qtsetblk函数
J=qtsetblk(I,S,dim,VALS)
用对应于VALS中的dim×dim块的值替换I的四叉树分解中的每个dim×dim块。qtdecomp函数返回的s稀疏矩阵,包括四叉树结构;VALS是dim×dim×k的数组,K是四叉树分解的dim×dim块的个数。
示例1)图像分析中的灰度边缘检测示例
%调入并显示RGB图像
* RGB = im read(' flowers . TIF ');
ISR GB(RGB);
图(1);imshow(RGB);
RGB = im read(' autumn . TIF ');
ISR GB(RGB);
图(1);imshow(RGB);
% RGB图像已转换为灰度图像
I = RGB 2 gray(RGB);
图(2);imshow(一);
color bar(“horiz”);
isgray(一);
%边缘检测
ED=edge(I,'索贝尔',0.08);
图(3);im show(ED);
Sobel边界检测器和Canny边界检测器在图像分析中的应用实例操作对象仍然是上面提到的rice.tif图像为例。其代码如下:
I = im read(' rice . TIF ');
I = im read(' rice . png ');
BW1=edge(I,' Sobel ');
BW2=edge(I,' canny ');
图(1);im show(bw 1);
图(2);im show(BW2);
图形控制
利用MATLAB中的图像高速技术来改善图像。这里的“提高”有两层意思,即客观方面,比如提高图像的信噪比;主观上比如通过对图像的颜色和强度(灰度)进行校正,一些特征更容易识别。1.对比度增强在MATLAB中,相关的函数有:1)对比度调整函数:imadjust函数该函数可用于调整灰度值或颜色图,其用法为:
J=imadjust(I,[低高],[底部顶部],伽玛)
将灰度图像I转换为图像J,并使值从低到高、从下到上匹配。大于上限值或小于下限值的值被截断,即小于下限值的值匹配下限值,大于上限值的值匹配上限值。使用该函数时,可以将[低高]或[底高]指定为空矩阵[],默认值为[0 1]。Gamma用于指定描述I和J值之间关系的曲线形状;gamma & lt1,越亮输出值越强;伽马& gt1,越亮输出值越弱;默认gamma=1,表示线性变换。
newmap=imadjust(map,[低高],[底部顶部],伽玛)
转换索引图像的颜色映射。如果[low high]和[bottom top]都是2×3矩阵,那么gamma就是1×3向量,红、绿、蓝分量分别用imadjust函数进行调整,调整后的颜色图newmap的大小与原图相同。
RGB=imadjust(RGB1,…)
调整RGB图像RGB1的每个图像块。与调整色彩映射表一样,通过指定[低高]和[底部顶部]为2×3矩阵,gamma为1×3向量,可以为每个图像块使用不同的参数值。如果顶部
2)函数:brighten函数该函数的用法是:brighten(beta)使现有的颜色图变亮或变暗。如果为0
贴图=变亮(beta)
返回当前使用的颜色贴图的较亮或较暗的变换颜色贴图,但不更改现有显示。
NEWMAP=brighten(MAP,beta)
返回指定色彩映射表经过更亮或更暗的变换后的新色彩映射表NEWMAP,但不改变显示。
增亮(图,测试版)
增强图的所有对象。
3)直方图调整法在MATLAB中,histeq函数使用直方图均衡化来增强对比度。直方图均衡化通过转换灰度图像的亮度值或索引图像的色彩映射值来增强图像对比度,输出图像的直方图与给定的直方图近似匹配。
J=histeq(I,hgram)
变换灰度图像I,使得输出图像J的直方图具有长度(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,长度(hgram)必须与大小(MAP,1)相同。输入图像可以是uint8或双精度类型。输出颜色图通常是双精度类型。输出t也是双精度类型。
图像平滑图像平滑主要用于因干扰而质量下降的图像。在MATLAB图像处理工具箱中,与图像噪声相关的函数有:1)给图像添加噪声:imnoise函数。该功能的用法是:
J=imnoise(I,type,…)
Type noise被添加到灰度图像I. Type是下列字符串之一:' Gaussian ':添加高斯白噪声;盐& amp' Pepper ':添加黑白像素;“斑点”:增加乘法噪声。其他参数根据类型确定。
J=imnoise(I,'高斯',M,V)
将均值为m、方差为v的高斯白噪声加到图像I上,默认值为0,方差为0.01。
J=imnoise(I,'盐& amp胡椒
将强度为d的“树盐”黑白像素添加到图像I。效果类似于:D*prod(大小(I))像素。默认强度为0.05。
J=imnoise(I,“斑点”,V)
使用公式J=I+n*I,乘法噪声被添加到图像I,其中n是平均值为0且方差为v的均匀分布的随机噪声..v的默认值为0.04。图像I类型为uint8或双精度值,输出图像j与I类型一致。
2)二维中值滤波器:medfilt2 2函数。
B=medfilt2(A,[M N])
对矩阵a进行二维中值滤波,每个输出像素包含输入图像中对应像素周期的M×N邻域的中值。在图像边缘加0,这样边缘在[M N]/2以内的点可能会失真。[M N]的默认值为[3 ^ 3]。
B=medfilt2(A,'索引',…)
把A当作索引图,如果A是uint8,就填0;如果a是双精度类,则填充1。
3)状态统计滤波器:ordfilt2 2函数。
Y=ordfilt2(X,顺序,域)
用域中非零元素指定的邻域有序集中的有序元素替换x中的每个元素。定义域是一个只包含0和1的矩阵,1只定义了滤波运算的邻域。
Y=ordfilt2(X,顺序,域,S)
S和domain一样大,用domain的非零值对应的S的值作为附加补偿。
4)二维自适应去噪滤波器:wiener2函数wiener2函数估计每个像素的局部均值和方差,该函数的用法如下:
J=wiener2(I,[M N],噪声)
利用M×N大小邻域内局部图像的均值和偏差,对图像I进行像素自适应滤波。
[J,噪声]=wiener2(I,[M N])
在滤波之前,估计附加噪声的能量。
特定区域处理
区域的指定
在图像处理中,有时只需要处理图像中的特定区域,而不需要处理整个图像。在MATLAB中,通过二进制掩码实现对特定区域的处理。选择一个区域后,将生成一个与原图像大小相同的二值图像。所选区域为白色,其余区域为黑色。通过屏蔽图像,可以实现对特定区域的选择性处理。下面介绍创建区域的方法:1。多边形选择方法roipoly函数用于设置图像中的多边形区域,该函数返回与输入图像大小相同的二值图像BW。所选区域的值为1,其余区域的值为0。其语法格式为:
BW=roipoly(I,c,r)
它的功能是用向量C和R指定多边形每个角的X和Y轴坐标..
BW=roipoly(I)
它的作用是让用户交互选择多边形区域,通过点击鼠标设置多边形区域的角点,用空格键和Del键取消选择,回车确认选择。确认后,该函数返回与输入图像大小相同的二值图像BW,多边形区域的像素值为1,其余区域为0。
BW=roipoly(x,y,I,,yi)
它的作用是用向量X和Y建立一个非默认的坐标系,然后在指定的坐标系中选择向量和yi指定的多边形区域。
[BW,,yi]=罗保利(…)
它的功能是交互式地选择多边形区域,并返回多边形拐角的坐标。
[x,y,BW,,yi]=roipoly(…)
其作用是交互选择多边形区域后,返回多边形顶点在指定坐标系X-Y中的坐标。
示例:根据指定坐标选择六边形区域的程序列表:
I = im read(' eight . TIF ');
c =[222 272 300 272 222 194];
r =[21 21 75 121 121 75];
BW=roipoly(I,c,r);
图(1);imshow(一);
图(2);im show(BW);
其他选择方法MATLAB的图像处理工具箱提供了可以根据灰度选择区域的函数roicolor,其语法格式为:
BW=roicolor(A,低,高)
它的作用是将图像按照指定的灰度范围进行划分,返回二值掩码BW,其中【低,高】为所选区域的灰度范围。如果low大于high,则返回一个空矩阵。
BW=roicolor(A,v)
其功能是根据矢量v中指定的灰度值选择区域。以下是根据灰度级分割图像中对象的程序列表:
I = im read(' rice . TIF ');
I = im read(' rice . png ');
BW=roicolor(I,128,255);
图(1);imshow(一);
图(2);im show(BW);
特定区域过滤
MATLAB图像处理工具箱中提供的roifilt2 2函数用于过滤特定区域,其语法格式为:
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有趣操作的结果,其余像素值是I的原始值..
示例:用于锐化和过滤指定区域的程序列表:
I = im read(' eight . TIF ');
c =[222 272 300 272 222 194];
r =[21 21 75 121 121 75];
BW=roipoly(I,c,r);
h = f special(' unsharp ');
J=roifilt2(h,I,BW);
支线剧情(1,2,1);imshow(一);
支线剧情(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,,yi)
[x,y,J,BW,,yi]=roifill(…)
它的作用是在指定的坐标系X-Y中填充由矢量和Yi指定的多边形区域
示例:以下是为人口指定的区域计划列表:
I = im read(' rice . TIF ');
I = im read(' rice . png ');
c =[52 72 300 270 221 194];
r =[71 21 75 121 121 75];
J=roifill(I,c,r);
支线剧情(1,2,1);imshow(一);
支线剧情(1,2,2);imshow(J);
读取图形图像文件
与图形图像文件操作相关的函数save一直加载或保存MAT文件中的矩阵数据,加载或保存图形文件格式的图像,如BMP、TIFF、Imread、imwrite,显示图像加载在MATLAB7.0中,imagesc信息查询Imfinfo、ind2rgb。
读取图形图像文件
主呼叫格式:
A=imread(文件名,fmt) [X,映射]=imread(文件名,fmt)
[…]=imread(文件名)[…]=imread(URL,…)
[…]=imread(…,idx)(仅限CUR、ICO和TIFF)
[…]=imread(…,idx)(仅限CUR、ICO和TIFF)
[…]=imread(…,' frames ',idx)(仅适用于GIFF)
[…]=imread(…,ref)(仅限HDF)
[…]=imread(…,' BackgroundColor ',BG)(仅限PNG)
[A,map,alpha]=imread(…)(仅限CUR,ICO与PNG)
最基本的呼叫格式:
[X,map]=imread(文件名,fmt)
*imread('rice.png ',' 5 ');%读取rice.png文件的第5帧图像。
* RGB = im read(' earth . jpg ');
%将图像earth.jpg读入MATLAB7.0平台,读取数据矩阵为变量RGB。
图形图像文件的写入和显示
使用imwrite完成写入图形图像文件的操作:基本调用格式:imwrite(X,map,filename,fmt)
加载小丑%根据地图格式(MATLAB数据文件格式)加载图像。
Imwrite(X,地图,'小丑。JPG))%保存为包含小丑图像的JPG文件。
图像函数可用于显示图像,其语法格式为:
image(C) image(x,y,C) image(…,' PropertyName ',PropertyValue,…)
image('PropertyName ',PropertyValue,…) handle=image(…)
imagesc函数类似于image函数,但它可以自动缩放输入数据。
加载小丑%根据地图格式(MATLAB数据文件格式)加载图像。
Image(10,10,X)%显示一个小丑图像,图像左上角坐标为(0,0)。
色彩映射表(地图)%
高级图像显示功能imshow,其语法格式为:
imshow(I,n) imshow(I,[低,高]) imshow(BW) imshow(X,map)
imshow(RGB) imshow(…,display_option) imshow(x,y,A,…) imshow文件名
h=imshow(…)
I=imread('rice.png ')
j = filter 2([1 2;-1 -2],I)% template[1 2;-1–2]过滤图像。
imshow(一)
图,imshow(J,[])
用图像阅读器显示图像
图像阅读器的开关
1.在图像查看器中显示图像:imview。
moon fig = im read(' 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