您好,欢迎访问三七文档
媒体计算方法课程实验总结报告实验名称:媒体特征提取学号:姓名:日期:2014-12-23一、实验目的1、实验目标以图像媒体为例,对指定的图像数据进行颜色特征、形状特征、局部不变等特征提取处理,体会不同的图像特征提取方法的特点和适用范围。2、实验涉及到的学习内容颜色特征提取、形状特征提取、局部不变特征提取(SIFT)。二、实验具体完成情况1、总体实验方案利用matlab编程实现对图像的颜色特征提取、形状特征提取和局部不变特征提取(SIFT)。2、具体技术途径matlab图像处理函数。3、实验结果与分析(1)颜色特征提取编写图像的灰度直方图特征提取算法,实现与imHist函数类似的效果。算法思想:利用for循环对原始图像进行遍历,统计每个颜色值在图像中的像素个数,根据统计结果绘制直方图。实验结果图1本算法绘制的原始图像的直方图图2imhist函数绘制的原始图像直方图(2)形状特征提取通过边缘检测等方法提取简单图像的边界特征,并用链码的方式保存图像的形状特征。算法思想:对原始图像进行边缘提取,在得到的边缘特征矩阵中寻找一个非零点,即边缘像素点,从该点开始,沿顺时针方向遍历其相邻8个像素点,记录第一个非零点的相对位置。再遍历这个边缘像素点周围的像素点,寻找下一个边缘像素点,直到重新遍历到初始点停止。实验结果图3原始图像图4提取的图像边缘特征算法只提取了图像的边缘特征,并直接调用matlab的fchcode函数对图像边缘特征链码表示。(3)局部不变特征提取对于选定的某幅图像,提取SIFT局部不变特征,体会该特征的旋转、尺度、光照等不变性。算法思想:构建原始图像高斯金字塔;再同尺度相邻相差构建差分高斯金字塔;寻找尺度空间极值点,并删除错误点,其余为关键点;计算关键点坐标和所处的尺度;以关键点邻域梯度的主方向作为该点的方向特征。这里是使用别人写好的SIFT特征提取类函数,自己对其进行调用来实现特征提取以及匹配。实验结果图5原始图像图6提取的原始图像的SIFT特征信息图7相似图像的SIFT特征匹配三、存在的主要问题和建议三个小的实验算法思想并不难,但是在实现过程中发现自己的编程水平还有欠缺,理解了算法的思想,但是由于技术所限不能够按照算法思想自己编写一套程序。只能调用别人写好的函数实现自己预想的功能。另外此次实验都是在matlab中实现的,但在以后的工程实践中可能更多的是使用opencv,所以接下来要学习一下opencv的使用,现已在自己电脑的vs2010上配置好了opencv2.4.2,自己会在学习使用opencv的过程中重新实现以上实验。附:程序核心源代码(1)颜色特征提取closeall%imhist直方图特征提取f1=imread('Fig1202(c)(WashingtonDC_Band3_512).tif');subplot(1,2,1),imshow(f1),title('WashingtonDC_Band');subplot(1,2,2),imhist(f1),title('imhist');%自己编写imhist提取函数[m,n]=size(f1);a=zeros(1,256);fori=1:mforj=1:na(f1(i,j)+1)=a(f1(i,j)+1)+1;endendfigure();subplot(1,2,1),imshow(f1),title('WashingtonDC_Band');subplot(1,2,2),bar(a,'b');axis([02550max(a)+1000]),title('myself--imhist');(2)形状特征提取f=imread('Fig1107(a)(mapleleaf).tif');g=edge(f,'sobel');B=boundaries(g);b=B{1,1};c=fchcode(b);(3)尺度不变特征提取(Demo见附件)%sift.m%[image,descriptors,locs]=sift(imageFile)%%ThisfunctionreadsanimageandreturnsitsSIFTkeypoints.%Inputparameters:%imageFile:thefilenamefortheimage.%%Returned:%image:theimagearrayindoubleformat%descriptors:aK-by-128matrix,whereeachrowgivesaninvariant%descriptorforoneoftheKkeypoints.Thedescriptorisavector%of128valuesnormalizedtounitlength.%locs:K-by-4matrix,inwhicheachrowhasthe4valuesfora%keypointlocation(row,column,scale,orientation).The%orientationisintherange[-PI,PI]radians.%%Credits:ThanksforinitialversionofthisprogramtoD.Alvaroand%J.J.Guerrero,UniversidaddeZaragoza(modifiedbyD.Lowe)function[image,descriptors,locs]=sift(imageFile)%Loadimageimage=imread(imageFile);%IfyouhavetheImageProcessingToolbox,youcanuncommentthefollowing%linestoallowinputofcolorimages,whichwillbeconvertedtograyscale.%ifisrgb(image)%image=rgb2gray(image);%end[rows,cols]=size(image);%ConvertintoPGMimagefile,readablebykeypointsexecutablef=fopen('tmp.pgm','w');iff==-1error('Couldnotcreatefiletmp.pgm.');endfprintf(f,'P5\n%d\n%d\n255\n',cols,rows);fwrite(f,image','uint8');fclose(f);%Callkeypointsexecutableifisunixcommand='!./sift';elsecommand='!siftWin32';endcommand=[command'tmp.pgmtmp.key'];eval(command);%Opentmp.keyandcheckitsheaderg=fopen('tmp.key','r');ifg==-1error('Couldnotopenfiletmp.key.');end[header,count]=fscanf(g,'%d%d',[12]);ifcount~=2error('Invalidkeypointfilebeginning.');endnum=header(1);len=header(2);iflen~=128error('Keypointdescriptorlengthinvalid(shouldbe128).');end%Createsthetwooutputmatrices(useknownsizeforefficiency)locs=double(zeros(num,4));descriptors=double(zeros(num,128));%Parsetmp.keyfori=1:num[vector,count]=fscanf(g,'%f%f%f%f',[14]);%rowcolscaleoriifcount~=4error('Invalidkeypointfileformat');endlocs(i,:)=vector(1,:);[descrip,count]=fscanf(g,'%d',[1len]);if(count~=128)error('Invalidkeypointfilevalue.');end%Normalizeeachinputvectortounitlengthdescrip=descrip/sqrt(sum(descrip.^2));descriptors(i,:)=descrip(1,:);endfclose(g);%showkeys.m%showkeys(image,locs)%%ThisfunctiondisplaysanimagewithSIFTkeypointsoverlayed.%Inputparameters:%image:thefilenamefortheimage(grayscale)%locs:matrixinwhicheachrowgivesakeypointlocation(row,%column,scale,orientation)functionshowkeys(image,locs)disp('DrawingSIFTkeypoints...');%Drawimagewithkeypointsfigure('Position',[5050size(image,2)size(image,1)]);colormap('gray');imagesc(image);holdon;imsize=size(image);fori=1:size(locs,1)%Drawanarrow,eachlinetransformedaccordingtokeypointparameters.TransformLine(imsize,locs(i,:),0.0,0.0,1.0,0.0);TransformLine(imsize,locs(i,:),0.85,0.1,1.0,0.0);TransformLine(imsize,locs(i,:),0.85,-0.1,1.0,0.0);endholdoff;%------Subroutine:TransformLine-------%Drawthegivenlineintheimage,butfirsttranslate,rotate,and%scaleaccordingtothekeypointparameters.%%Parameters:%Arrays:%imsize=[rowscolumns]ofimage%keypoint=[subpixel_rowsubpixel_columnscaleorientation]%%Scalars:%x1,y1;beginingofvector%x2,y2;endingofvectorfunctionTransformLine(imsize,keypoint,x1,y1,x2,y2)%Thescalingoftheunitlengtharrowissettoapproximatelytheradius%oftheregionusedtocomputethekeypointdescriptor.len=6*keypoint(3);%Rotatethekeypointsby'ori'=keypoint(4)s=sin(keypoint(4));c=cos(keypoint(4));%Applytransformr1=keypoint(1)-len*(c*y1+s*x1);c1=keypoint(2)+len*(-s*y1+c*x1);r2=keypoint(1)-len*(c*y2+s*x2);c2=keypoint(2)+len*(-s*y2+c*x2);line([c1c2],[r1r2],'Color','c');%match.m%num=match(image1,image2)%%Thisfunctionreads
本文标题:媒体特征提取
链接地址:https://www.777doc.com/doc-2484768 .html