|
头发区域面积应该在一定范围内 衣服区域应该很大 所以区域面积在一定范围内看做是人头 否则就去除可以用regionprops内的area去判断 同时加上长短轴 这里贴一个简单例子
7 F% p' Q \* _' M! w Y5 s
" s; m/ A3 G7 i5 s {4 J2 p4 M* H8 D) Q* h
clc; clear all; close all;4 g4 Z W2 [& E- F. f7 I
I = imread('c:\\ce.jpg');9 p( f6 y e6 X6 _; K8 x; v. W. g2 l
I1 = rgb2gray(I);& e! r# b1 w: `; U) r5 r
bw1 = im2bw(I1, graythresh(I1));
, f" U. d- a0 [4 [bw1 = ~bw1;
0 w+ h' W q; ~" r, J; \' ybw2 = imopen(bw1, strel('disk', 10));! H }8 ^+ \7 C1 P' V, i
bw2 = bwareaopen(bw2, 500);. F" X y5 M- T6 c# l
bw3 = bwareaopen(bw2, 1000);
0 z1 N2 |& A( J3 U) ~" B1 I1 B8 `bw4 = bw2.*(~bw3);% U* d0 ?/ t1 s4 O/ _5 y
[L, num] = bwlabel(bw4);# ^) `' f! e. D' G; D8 w
Lrgb = label2rgb(L, 'jet', 'w', 'shuffle');
* W: M$ K- `5 {; b1 G5 v+ }( ifigure;; H8 E/ h+ E; V" Z
subplot(3, 2, 1); imshow(I)
' l* v4 o; W _+ zsubplot(3, 2, 2); imshow(I1)* h/ X* `) g4 _" G5 s1 V
subplot(3, 2, 3); imshow(bw1)
3 Y4 r% K* M; D# y& _subplot(3, 2, 4); imshow(bw2)
: o6 O z8 u/ m% P" S' q. Usubplot(3, 2, 5); imshow(bw4)
; q# L+ F( Q1 d2 z; @# V+ M1 `7 msubplot(3, 2, 6); imshow(I)
/ b0 n6 U* s8 o- p2 S- O6 uhold on;
8 D3 B! R0 T/ m% ^$ W( Qhimage = imshow(Lrgb);: w' W7 X: {2 _
set(himage, 'AlphaData', 0.5);
" F9 `1 j6 K( W9 P+ K0 f7 P |
|