clc
clear
close all
img1=imread('11.png');
img=img1;%read('20.jpg');
imshow(img);title('Original IMG');
detector = vision.CascadeObjectDetector;
%测试4:EyePairBig/EyePairSmall
release(detector);
detector.ClassificationModel='EyePairBig';
bboxes1=detector(img);
EyePairBig=insertObjectAnnotation(img,'rectangle',bboxes1,'Eyes');
figure(4);imshow(EyePairBig);title('EyePairBig');
release(detector);
%% 测试8:Mouth
release(detector);
detector.ClassificationModel='Mouth';
detector.MergeThreshold=100;%增加合并阈值
bboxes2=detector(img);
Mouth=insertObjectAnnotation(img,'rectangle',bboxes2,'Mouth');
figure(8);imshow(Mouth);title('Mouth');
detector.MergeThreshold=4;
%% 测试9:Nose
release(detector);
detector.ClassificationModel='Nose';
detector.MergeThreshold=10;;%增加合并阈值
bboxes3=detector(img);
Nose=insertObjectAnnotation(img,'rectangle',bboxes3,'Nose');
figure(9);imshow(Nose);title('Nose');
bboxes=bboxes1;
s1=bboxes(1,1);
s2=bboxes(1,3);
s3=bboxes(1,2);
s4=bboxes(1,4);
%d=(img(s1:s1+s2,s3:s3+s4,:));
%imshow(d)
%rectangle('Position',[s1,s2,s3,s4]);%,'Curvature',cur) %adds curvature to the sides
rectangle('Position',[s1,s3,s2,s4],...
'LineWidth',2,'LineStyle','-')
hold on
plot(s1,s3,'-r*')
figure
dd=img(s3:s3+s4,s1:s1+s2,:);
imshow(dd)
Img=dd;
I = rgb2gray(dd);
% 二值化
th = max(graythresh(I)*0.4, 0.1);
bw = im2bw(I, th);
% 提取边缘
bwe = edge(bw, 'canny');
% 填孔处理
bwd = imfill(bwe, 'holes');
bwf = bwd;
bwf = imdilate(bwf, strel('square', 3));
bwf = imfill(bwf, 'holes');
% 去掉边缘噪声
[L, num] = bwlabel(bwf);
stats = regionprops(L);
Ar = cat(1, stats.Area);
[Ar, ind] = sort(Ar, 'descend');
if num > 2
for j = 3 : num
bwf(L == ind(j)) = 0;
end
end
% 提取定位结果
rect1 = stats(ind(1)).BoundingBox;
rect2 = stats(ind(2)).BoundingBox;
rect1(2) = rect1(2) - 2;
rect2(2) = rect2(2) - 2;
rect{1} = rect1;
rect{2} = rect2;
% 标记结果
r = Img(:, :, 1);
g = Img(:, :, 2);
b = Img(:, :, 3);
r(bwf) = 255;
g(bwf) = 0;
b(bwf) = 0;
Im = cat(3, r, g, b);
nv = sum(bwf(:));
% 显示结果
figure(3);
subplot(2, 3, 1); imshow(Img, []); title('原图像');
hold on;
rectangle('Position', rect{1}, 'EdgeColor', 'r');
rectangle('Position', rect{2}, 'EdgeColor', 'r');
hold off;
subplot(2, 3, 2); imshow(bw, []); title('二值图像');
subplot(2, 3, 3); imshow(bwe, []); title('边缘图像');
subplot(2, 3, 4); imshow(bwd, []); title('填孔图像');
subplot(2, 3, 5); imshow(bwf, []); title('去噪图像');
subplot(2, 3, 6); imshow(Im, []); title('标记图像');
bboxes=rect1;
s11=bboxes(1,1);
s21=bboxes(1,3);
s31=bboxes(1,2);
s41=bboxes(1,4);
figure
imshow(img)
rr=[s1+s11,s3+s31,s21,s41]
rectangle('Position', rr, 'EdgeColor', 'r');
%d%d=img(s3+s31:s3+s31+s41,s1+s11:s1+s11+s21,:);
%imshow(dd)
hold on
plot(s1+s11,s3+s31,'-*r')
hold on
plot(s1+s11+s21,s3+s31,'-*r')
hold on
plot(s1+s11+s21/2,s3+s31,'-*r')
bboxes=rect1;
s11=bboxes(1,1);
s21=bboxes(1,3);
s31=bboxes(1,2)-80;
s41=bboxes(1,4);
figure
imshow(img)
rr=[s1+s11,s3+s31,s21,s41]
rectangle('Position', rr, 'EdgeColor', 'r');
%d%d=img(s3+s31:s3+s31+s41,s1+s11:s1+s11+s21,:);
%imshow(dd)
hold on
plot(s1+s11,s3+s31,'-*r')
hold on
plot(s1+s11+s21,s3+s31,'-*r')
hold on
plot(s1+s11+s21/2,s3+s31,'-*r')
s1=s1+s11+s21/2,
s2=s3+s31
save s1.mat s1 s2