图像特征提取matlab程序

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

%直接帧间差分,计算阈值并进行二值化处理(效果不好)

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;

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 end

mark = mark + 1;

% while

相关文档
最新文档