function IK_Demo_Sample_Label_LeftSingle()
clear
close all
StarTim = tic;
%% 对降采样的人脸图像进行人工的图像标定
%% 已经标记了一个点,根据该点的中心坐标,标记剩余图像的虹膜半径信息
rootPath = 'E:\文件\标图程序\20171017\';
%% 图像目录
imPath = [rootPath,'yuxi\'];
%% 输出Label和Example目录
examplePath = [rootPath,'Result\Example\'];
finalLabelPath = [rootPath,'Result\leftLabel\'];
if isdir(examplePath)~=1
mkdir(examplePath);
end
if isdir(finalLabelPath)~=1
mkdir(finalLabelPath);
end
imlist = dir([imPath,'*.jpg']);
imNum = length(imlist);
%% 只标记左眼
lrFlag = 1;
labelI = 1;
% bgRow = 1;
resizeRate = 1;
for i=1:imNum;
fileName = slfilepart(imlist(i).name,'title');
fprintf('Process Title %s\n',fileName);
%如果已经标记过,则直接保存example图像
if isfile([finalLabelPath,fileName,'.mat'])==1
if isfile([examplePath,fileName,'.jpg'])~=1
load([finalLabelPath,fileName,'.mat']);
lrLabel = round(lrLabel);
im = imread([imPath,fileName,'.jpg']);
rgbim = im;
leftX = lrLabel(1);leftY = lrLabel(2);leftR = lrLabel(3);
righX = lrLabel(4);righY = lrLabel(5);righR = lrLabel(6);
if leftX~=-1
rgbim = circleRgb3D(rgbim,leftX,leftY,leftR,[0,255,0],0);
end
if righX~=-1
rgbim = circleRgb3D(rgbim,righX,righY,righR,[255,0,0],0);
end
imwrite(rgbim,[examplePath,fileName,'.jpg']);
end
labelI = labelI+1;
continue;
end
im = imread([imPath,fileName,'.jpg']);
irisIm = im(:,1:1280);
irisBgRow = 0;
irisBgCol = 0;
[w,h]=size(im);
while(1)
rgbim = gray2rgb(irisIm);
imshow(rgbim);title([num2str(labelI),'输入虹膜第1个点,如果没有眼睛点空白处']);
[a] = ginput(1);
hold on
plot(a(1),a(2),'ro');
if a(1)<0|a(2)<0|a(1)>1280|a(2)>w
lrLabel = [-1,-1,-1,-1,-1,-1];
labelI = labelI+1;
save([finalLabelPath,fileName,'.mat'],'lrLabel');
break;
% continue;
end
title([num2str(labelI),'输入虹膜第2个点']);
[b] = ginput(1);
plot(b(1),b(2),'ro');
title([num2str(labelI),'输入虹膜第3个点']);
[c] = ginput(1);
plot(c(1),c(2),'ro');
[irisY,irisX,irisRad] = circleCent(a,b,c);
rgbim = circleRgb3D(rgbim,irisX,irisY,irisRad,[255,255,0],0);
imshow(rgbim);title('确认请按键盘,重新标记请点击鼠标');
k = waitforbuttonpress;
if k==1
labelI = labelI+1;
irisOrgX = round(irisX/resizeRate+irisBgRow);
irisOrgY = round(irisY/resizeRate+irisBgCol);
irisOrgRad = round(irisRad/resizeRate);
lrLabel = [irisOrgX,irisOrgY,irisOrgRad,-1,-1,-1];
save([finalLabelPath,fileName,'.mat'],'lrLabel');
clear rgbim,[a],[b],[c]
break;
end
end
end
function [x,y,r] = circleCent(a,b,c)
%计算圆心部分
syms x y
s1=sqrt((a(1)-x)^2+(a(2)-y)^2);%到各点距离
s2=sqrt((b(1)-x)^2+(b(2)-y)^2);
s3=sqrt((c(1)-x)^2+(c(2)-y)^2);
eq1=s1-s2; %方程
eq2=s2-s3;
[x,y]=solve(eq1,eq2,'x','y'); %解方程
x=double(x);
y=double(y);
r = sqrt((x-a(1))^2+(y-a(2))^2);
这是个标记样本图片的小程序,为什么前十几张标的时候特别流畅,再往后程序变得越来越慢特别卡,每次标个二十张就得把程序关了从新开,求大神解答一下怎么办。