老子吃火锅 2017-10-18 06:43
浏览 2277

matlab 程序变慢原因....

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);

这是个标记样本图片的小程序,为什么前十几张标的时候特别流畅,再往后程序变得越来越慢特别卡,每次标个二十张就得把程序关了从新开,求大神解答一下怎么办。

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 Stata 面板数据模型选择
    • ¥20 idea运行测试代码报错问题
    • ¥15 网络监控:网络故障告警通知
    • ¥15 django项目运行报编码错误
    • ¥15 请问这个是什么意思?
    • ¥15 STM32驱动继电器
    • ¥15 Windows server update services
    • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
    • ¥15 模糊pid与pid仿真结果几乎一样
    • ¥15 java的GUI的运用