我正在尝试开发一个程序,该程序将查找圆形对象(硬币)并测量其大小,并以此为基础分配值。我需要考虑拍摄特定照片的位置形式,例如角度。由于某些硬币从不同角度看起来会比其他硬币更大,因此值分配将有缺陷,因此我试图通过投影变换(投影倾斜图像)解决它,而到目前为止,我仍然无法以这样的方式投影倾斜的照片产生或多或少相等的直径测量值。我的代码如下:
I = imread('coins2.jpg');
imshow(I);
M = ginput(4);
X = ginput(4);
P = maketform('projective', M, X);
I = imtransform(I, P, 'nearest');
G = rgb2gray(I);
K = medfilt2(G);
[centers,radii] = imfindcircles(K,[90 140],'ObjectPolarity','dark','Sensitivity',0.95);
h = viscircles(centers, radii);
arr = [];
for r = 1:length(radii)
if (radii(r)) >= 105
arr(r) = 1;
elseif (radii(r)) < max(radii) && radii(r) > 100
arr(r) = 0.2;
elseif(radii(r)) < 100 && (radii(r)) > 95
arr(r) = 0.05;
elseif (radii(r)) < 95 && (radii(r)) > 90
arr(r) = 0.1;
end
end
result = sum(arr);
答案 0 :(得分:0)
如果您可以选择检测图片中的角(例如,矩形支撑上的硬币),则可以使用此Matlab文件: https://kr.mathworks.com/matlabcentral/fileexchange/35531-perspective-control-correction手动或自动检测4个角以校正透视,然后您将可以照常使用imfindcircles。