logo资料库

图像特征提取matlab程序.pdf

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
----WORD 格式 --可编辑 ---- %直接帧间差分,计算阈值并进行二值化处理(效果不好) clc; clear; Im1 = double(imread('lena.TIF')); Im2 = double(imread('lena.TIF'); %读取背景图片 % 读取当前图片 [X Y Z] = size(Im2); DIma = zeros(X,Y); for i = 1:X for j = 1:Y %当前图片的各维度值 DIma(i,j) =Im1(i,j) - Im2(i,j); % 计算过帧间差分值 end end figure,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') [XX YY] = find(BW==0); handle = rectangle('Position',[min(YY),min(XX) ,max(YY)-min(YY),max(XX)-min(XX)]); %寻找有效像素点的最大边框 set(handle,'EdgeColor',[0 0 0]); hei = max(XX)-min(XX); %边框高度 mark = min(YY)+1; while mark < max(YY)-1 %从边框左边开始到右边物质循环,寻找各个人体边缘 left = 0;right = 0; for j = mark:max(YY)-1 ynum = 0; for i = min(XX)+1 : max(XX)-1 if BW(i,j) == 0; ynum = ynum + 1; ----
----WORD 格式 --可编辑 ---- end end if ynum > 0.1*hei % 如果该列上像素点个数大于边框高度的某个阈值 left = j mark = j; break end end if left~= 0 % 认为找到了左边界 % 如果找到了左边界 for j = left+1 : max(YY)-1 %则从左边界到边框右边界寻找人体右边界 ynum = 0; for i = min(XX)+1 : max(XX)-1 if BW(i,j) == 0; ynum = ynum + 1; 阈值 end end if ynum < 0.1*hei right= j mark = j; break end end if left~=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',[0 0 0]); %显示图像中人体有效边界 end end mark = mark + 1; end % while ----
分享到:
收藏