我该如何在Matlab中校准图像?

时间:2017-11-22 19:24:03

标签: matlab image-processing

我有数百张附加的图像,我需要将它们校准到真实世界的单位,如毫米。我已阅读空间校准演示here,但每次分析图像时都无法绘制线条,以生成校准因子。如何在循环中调整代码?感谢名单!!!

enter image description here

1 个答案:

答案 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

希望有所帮助