hsv或者rgb模型网上找找代码试试。
1:直接把原来图像矩阵的一部分拿出来就行了。如果A是原始图像矩阵mn3。mn像素,3个通道RGB可以直接使用B=A(1:10,1:10n,1:3)这样就把源图像的一个小块放到矩阵B中了,之后进行处理就行了。
2:MTALAB最强的项目就是矩阵运算,计算效率远远高于C/C++,是常用的工程计算线性方程组的计算软件。
3:数据拟合功,MATLAB具有强大数据分析拟合能力,常用的拟合工具箱CFTOOL。
4:数值积分微分运算,MATLAB内部有现成的一些常用的数值计算方法,例如牛顿法、高斯法等,同时MATLAB也可以进行符号运算,进行符号积分以及微分运算,这是让人振奋的功能。
显示和探查图像
图像处理工具箱扩展了 MATLAB 的图形功能,提供可高度自定义的图像显示功能。可在单个窗口中用多幅图像创建画面,使用文本和图形对画面进行注释,并创建柱状图、配置文件和轮廓图等专用画面。
除显示功能之外,工具箱还提供一套用于探查图形和构建 GUI 的交互式工具。可查看图像信息、缩放和平移图像,还可仔细检查像素区域。能以交互式方式放置和 *** 作各种形状的 ROI,例如点、线、矩形、多边形、椭圆和随手绘制的形状。能以交互式方式进行裁剪、调节对比度和测量距离。该套工具可在图像工具中找到,还通过用于创建自定义 GUI 的各个函数提供。
使用图像工具的典型交互式会话。当在图像工具里查看放大视图时,使用概述窗口(左侧)导航。像素区域窗口(右侧)将像素值叠加到高度放大的视图上。征得 Space Imaging, LLC 许可的 LANDSAT 格式的巴黎图像。
使用感兴趣区域工具创建掩模。选择了原始图像(顶部)中的项以创建掩模(底部)。
该工具箱包含用于在时间推移视频观看器或图像剪辑画面中显示视频和图像序列的工具。MATLAB 中的体积可视化工具可用于为多维图像数据集创建等值面画面。
视频观看器暂停于视频序列的单帧上。
matlab中提取的附加信息步骤如下:
1、使用imfinfo函数读取图像文件中所有的元数据信息,并将其保存在一个结构体数组中。该函数的基本语法如下:matlab,info=imfinfo('myimagejpg'),其中,`myimagejpg`是待读取的图像文件名,`info`则是返回的包含所有元数据信息的结构体数组。
2、查看所需的附加信息字段,该结构体数组中包含许多元数据字段,例如图像的宽度、高度、颜色类型、压缩类型、创建时间等。根据需要,选择所需的附加信息字段,使用点运算符``来访问这些字段。
3、根据需要对图像进行处理。一旦提取了所需的附加信息,可以使用MATLAB中其他函数来处理图像文件。
你处理的图像是什么模式的?索引还是RGB?
即然图像是灰度你读的也太麻烦了。后面不用加map
你把处理后的显示图像的语句这样写就行了。
imshow(I,[]);
MATLAB的影像处理工具箱支持多种标准的图像处理 *** 作,以方便用户对图像进行分析和调整。这些图像处理 *** 作主要包括: ①获取像素值及其统计数据; ②分析图像,抽取其主要结构信息; ③调整图像,突出其某些特征或抑制噪声
像素值及其统计
MATLAB的影像处理工具箱提供了多个函数以返回与构成图像的数据值相关的信息,这些函数能够以多种形式返回图像数据的信息,主要包括: ①选定像素的数据值(pixval函数和impixel函数); ②沿图像中某个路径的数据值(improfile函数); ③图像数据的轮廓图(imcontour函数); ④图像数据的柱状图(imhist函数); ⑤图像数据的摘要统计值(mean2函数、std2函数和corr2函数); ⑥图像区域的特征度量(imfeature函数)
像素选择 影像处理工具箱中包含两个函数可返回用户指定的图像像素的颜色数据值。 1) pixval函数 当光标在图像上移动时,该函数以交互的方式显示像素的数据值。另外,该函数还可以显示两个像素之间的Euclidean距离。
2) impixel函数 impixel函数可以返回选中像素或像素集的数据值。用户可以直接将像素坐标作为该函数的输入参数,或用鼠标选中像素。 例:
imshow canoetif;
val=impixel
对于索引图像,pixel函数和impixel函数都将其显示为存储在颜色映像中的RGB值而不是索引值。
强度描述图 在MATLAB影像处理工具箱中,提供了improfile函数用于沿着图像中一条直线段路径或直线路径计算并绘制其强度(灰度)值。 例:
imshow debyeltif;
improfile
imshow canoetif;
improfile
例:
RGB=imread('flowerstif');
figure(1);imshow(RGB);
improfile
图像轮廓图 在灰度图的轮廓图显示时,可利用MATLAB影像处理工具箱中的imcontour函数。该函数类似于contour函数,与contour函数相比,其功能更全。它能够自动设置坐标轴对象,从而使得其方向和纵横比能够与所显示的图形相匹配。 例:
I=imread('ricetif');
imshow(I);
figure;imcontour(I)
I=imread('ricepng');
imshow(I);
figure;imcontour(I)
图像柱状图 图像柱状图可以用来显示索引图像或灰度图像中的灰度分布。可利用MATLAB影像处理工具箱中的imhist函数创建柱状图。 例:以前面介绍的大米灰度图为例来创建该图的柱状图。其代码如下:
I=imread('ricetif');
imhist(I,64);
I=imread('ricepng');
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('flowerstif');
isrgb(RGB);
figure(1);imshow(RGB);
RGB=imread('autumntif');
isrgb(RGB);
figure(1);imshow(RGB);
% RGB图像转换为灰度图像
I=rgb2gray(RGB);
figure(2);imshow(I);
colorbar('horiz');
isgray(I);
% 边缘检测
ED=edge(I,'sobel',008);
figure(3);imshow(ED);
2) Sobel边界探测器和Canny边界探测器在图像分析中的应用实例 *** 作的对象仍以前面提到ricetif图像为例。其代码如下:
I=imread('ricetif');
I=imread('ricepng');
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,方差为001的噪声。
J=imnoise(I, ‘salt & pepper’,D)
在图像I中加入强度为D的“树盐”黑白像素点。其效果近似于:Dprod(size(I))像素。缺省强度为005。
J=imnoise(I, ‘speckle’,V)
使用公式J=I+nI,向图像I中加入乘法噪声,其中n是均值为0,方差为V的均匀分布随机噪声。V缺省值为004。 图像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('eighttif');
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('ricetif');
I=imread('ricepng');
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('eighttif');
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('ricetif');
I=imread('ricepng');
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 显示加载到MATLAB70中的图像 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('ricepng','5'); %读取ricepng文件的第5帧图像
RGB=imread(‘earthjpg’);
%将图像earthjpg读入MATLAB70工作平台,读取数据矩阵为变量RGB
图形图像文件的写入与显示
用imwrite来完成图形图像文件的写人 *** 作: 基本调用格式:imwrite(X,map,filename,fmt)
load clown %根据MAP格式(MATLAB数据文件格式)装载图像
imwrite(X,map,'clownjpg') %保存为一幅包含小丑图像的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('ricepng')
J=filter2([1 2;-1 -2],I) %用模板[1 2;-1 –2]对图像滤波
imshow(I)
figure,imshow(J,[])
用图像阅读器显示图像
图像阅读器的开关
1.在图像阅览器中显示图像:imview
moonfig=imread('moontif');
imview(moonfig)
imview('moontif')
指定图像的起始大小 (1) 设置Imviewinitialmaginfication属性为‘fit’,默认值为100,100%显示 (2) 在imview函数中使用Initialmagnification参数,指定值为“fit”。
imshow(X,map,'InitialMaginfication','fit')
关图像阅览器 直接单击窗口下的关闭按钮, 或用下面的语句关闭:imview close all
参考教材: 《数字图像处理及MATLAB实现》余成波编著 重庆大学出版社 TN91173
姓名:边颖超
学号:19021210974
利用MATLAB读取一张灰度和彩色图像,查看其对应的元素矩阵,将灰度图像与彩色图像显示出来,并获取该图像的高度、宽度等信息,最后将该图像另存为一幅图像。
利用imread函数读入灰度hurricane,并命名为Original Imagel;利用imshow函数可在提前设置的窗口中对读入进行显示,本实验设置22矩阵窗口,灰度显示在第一位置;利用size函数在命令行窗口可得到灰度高度、宽度信息。如图1程序所示。
利用imread函数读入RGBcolor,并命名为Original Image2;利用imshow函数可在提前设置的窗口中对读入进行显示,本部分设置figure1窗口,22矩阵窗口,彩色显示在第二位置;利用size函数在命令行窗口可得到彩色高度、宽度信息。如图1程序所示。
(2)另存有三种方式,可以分别利用print、imwrite、saves三个函数进行保存。三种函数有各自不同的调用格式,如下图程序注释。本实验将figure1中所有显示的全部另存为文件名test1格式png,保存位置为当前文件夹。如图2程序所示。
(3)最终结果
以上就是关于matlab中,怎样从一副彩色图像中提取出一小块进行处理全部的内容,包括:matlab中,怎样从一副彩色图像中提取出一小块进行处理、如何处理matlab中的图形、matlab中怎么提取图片的附加信息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)