最近要做的一件事就是:对于一份给定的手掌图,要定位可寻的最大内切圆。做了近12个小时,才终于解决了这个问题,下面记录一下过程。
1、图片在MATLAB里是个矩阵,如何在矩阵作圆:
function [] = DrawCircle( Image, Centre, Radius )
figure, imshow(Image), hold on;
t = 0:0.01:2*pi;
x = round(Radius*cos(t) + Centre(1));
y = round(Radius*sin(t) + Centre(2));
%fill(x, y, 'w');
plot(x, y, '-r','LineWidth', 1);
plot(Centre(1), Centre(2), '*r');
end
2、如何实现内切圆心的定位:
% GA algorithm
optionsOrigin = gaoptimset('Generations', 50,...
'PopInitRange',[0;min(Width,Length)],...
'PopulationSize',ceil(min(Width,Length)/10));
[x, fval] = ga(@fitnessfcn, 3, optionsOrigin);
Centre = [x(1), x(2)];
Radius = fval;
str = sprintf('\nCentre = %f