matlab图像区域填充的原理_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)
matlab直方图
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)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论