您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 图像特征提取matlab程序
%直接帧间差分,计算阈值并进行二值化处理(效果不好)clc;clear;Im1=double(imread('lena.TIF'));%读取背景图片Im2=double(imread('lena.TIF');%读取当前图片[XYZ]=size(Im2);%当前图片的各维度值DIma=zeros(X,Y);fori=1:Xforj=1:YDIma(i,j)=Im1(i,j)-Im2(i,j);%计算过帧间差分值endendfigure,imshow(uint8(DIma))%显示差分图像title('DIma')med=median(DIma);%计算二值化阈值:差值图像中值mad=abs(mean(DIma)-med);%中值绝对差T=mean(med+3*1.4826*mad)%初始阈值Th=5*T;%调整阈值BW=DIma=Th;%根据阈值对图像进行二值化处理figure,imshow(BW)%se=strel('disk',2);%膨胀处理%BW=imopen(BW,se);%figure,imshow(BW)%title('BW')[XXYY]=find(BW==0);%寻找有效像素点的最大边框handle=rectangle('Position',[min(YY),min(XX),max(YY)-min(YY),max(XX)-min(XX)]);set(handle,'EdgeColor',[000]);hei=max(XX)-min(XX);%边框高度mark=min(YY)+1;whilemarkmax(YY)-1%从边框左边开始到右边物质循环,寻找各个人体边缘left=0;right=0;forj=mark:max(YY)-1ynum=0;fori=min(XX)+1:max(XX)-1ifBW(i,j)==0;ynum=ynum+1;endendifynum0.1*hei%如果该列上像素点个数大于边框高度的某个阈值left=j%认为找到了左边界mark=j;breakendendifleft~=0%如果找到了左边界forj=left+1:max(YY)-1%则从左边界到边框右边界寻找人体右边界ynum=0;fori=min(XX)+1:max(XX)-1ifBW(i,j)==0;ynum=ynum+1;endendifynum0.1*hei%如果该列上像素点个数小于边框高度的某个阈值right=j%认为找到了左边界mark=j;breakendendifleft~=right%如果左右边界值不相等,即同时找到了左右边界,继续以左右边界为界寻找上下边界[top,bottom]=Find_edge(BW,min(XX)+1,max(XX),left,right,0.1);handle=rectangle('Position',[left,top,right-left,bottom-top]);set(handle,'EdgeColor',[000]);%显示图像中人体有效边界endendmark=mark+1;end%while
本文标题:图像特征提取matlab程序
链接地址:https://www.777doc.com/doc-5167436 .html