我有数百张附加的图像,我需要将它们校准到真实世界的单位,如毫米。我已阅读空间校准演示here,但每次分析图像时都无法绘制线条,以生成校准因子。如何在循环中调整代码?感谢名单!!!
答案 0 :(得分:0)
您似乎需要手动记录比例,然后保存该值,以便以后在需要使用特定图像时使用。如果是这样,那么您应该将照片组合在一起(或分批),循环每张照片,记录比例,将比例保存到数组,然后将数组保存为稍后可以引用的文本文件。
如果你在一个文件夹中有一堆照片,那么这里有一个脚本可以遍历所有照片,并允许你点击设置每个照片的比例。如果使用ginput功能,可以单击大网格方块的两个相邻角,计算点之间的距离,这将为您提供每cm的像素数。循环的每次迭代都会将比例保存为与该照片对应的数组中的值。稍后,如果您需要照片'nDss7.jpg'的比例,请在照片列表中查找名称,然后使用索引引用比例数组中的相应索引。
disp('Select folder...')
path = uigetdir;
list = dir([path, filesep, '*.jpg']);
scale = zeros(length(list), 1);
for ii = 1 : length(list)
im = imread([path, filesep, list(ii).name]);
imshow(im)
hold on
ok = 0;
while ok == 0
disp('Click corners of large grid square')
% Input corners of large grid squares
[xCorner1, yCorner1] = ginput(1);
plot(xCorner1, yCorner1, 'r.', 'MarkerSize', 20)
[xCorner2, yCorner2] = ginput(1);
plot(xCorner2, yCorner2, 'r.', 'MarkerSize', 20)
% Check the points are ok
choice = questdlg('Are the corners accurate?',...
'Verification',...
'Yes', 'No', 'Yes');
% Handle response
switch choice
case 'Yes'
scale(ii) = sqrt((xCorner1 - xCorner2)^2 + (yCorner1 - yCorner2)^2); % scale in pixels per cm
disp(['Pixels per cm = ', num2str(scale(ii))])
ok = 1;
case 'No'
disp('Try again')
close all
imshow(frame)
hold on
continue
end
end
hold off
end
希望有所帮助