2

第 1 部分:128*128 图像上的对齐代码——这部分工作正常

             images = dir('*.jpg');

             [cs,index] = sort_nat({images.name});

             frame_number = 1;

             movMean = imresize(imread(cs{frame_number}),[128,128]);
             imgB = movMean;
             imgBp = imgB;
             correctedMean = imgBp;
             ii = 2;
             Hcumulative = eye(3);

             movMean2 = imresize(imread(cs{frame_number}),[1024,1024]);
             imgB2 = movMean2;
             imgBp2 = imgB2;
             correctedMean2 = imgBp2;

      while ii < length(images)

            % Read in new frame
            imgA = imgB; % 
            imgAp = imgBp; % 
            imgB = imresize(imread(cs{ii}),[128,128]); 
            imgB2 = imresize(imread(cs{ii}),[1024,1024]);

            % Estimate transform from frame A to frame B, and fit as an s-R-t
            H = cvexEstStabilizationTform(imgA,imgB);

            if isempty(H)

                break
            end

            HsRt = cvexTformToSRT(H);
            Hcumulative = HsRt * Hcumulative;
           imgBp = imwarp(imgB,affine2d(Hcumulative),'OutputView',imref2d(size(imgB)));


           imwrite(imgBp,[cs{ii},'_aligned.jpg'])
           ii = ii+1;

       end

第 2 部分:修改代码以将转换重新映射到 1024*104 图像 -- 无法成功重新映射

        images = dir('*.jpg');
        [cs,index] = sort_nat({images.name});
        frame_number = 1;

        movMean = imresize(imread(cs{frame_number}),[128,128]); 
        imgB = movMean;
        imgBp = imgB;
        correctedMean = imgBp;
        ii = 2;
       Hcumulative = eye(3);

       movMean2 = imresize(imread(cs{frame_number}),[1024,1024]); 
       imgB2 = movMean2;
       imgBp2 = imgB2;
       correctedMean2 = imgBp2;


       HdownScale = [ 128/1024        0 0; ...
                             0 128/1024 0; ...
                             0        0 1];


      HupScale   = [ 1024/128        0 0; ...
                            0 1024/128 0; ...
                            0        0 1];


       while ii < length(images)

            % Read in new frame
            imgA = imgB; 
            imgAp = imgBp; 
            imgB = imresize(imread(cs{ii}),[128,128]); 
            imgB2 = imresize(imread(cs{ii}),[1024,1024]);

            % Estimate transform from frame A to frame B, and fit as an s-R-t
            H = cvexEstStabilizationTform(imgA,imgB);

            HsRt = cvexTformToSRT(H);
            Hcumulative = HupScale * HsRt * Hcumulative * HdownScale;


         imgBp2 =imwarp(imgB2,affine2d(Hcumulative),'OutputView',imref2d(size(imgB2)));

         % Write Aligned images in given folder
         imwrite(imgBp2,[cs{ii},'_aligned.jpg'])

         ii = ii+1;

-- 灰烬

使用第 1 部分中的代码成功对齐 128*128 帧的示例

此处使用第 2 部分中的代码未成功重新映射到 1024*104 帧的示例

4

1 回答 1

1

您可以将调整大小视为将另一个缩放矩阵应用于您的图像

HdownScale = [ 512/4096        0 0; ...
                      0 512/4096 0; ...
                      0        0 1];

重新调整大小就像应用

HupScale   = [ 4096/512        0 0; ...
                      0 4096/512 0; ...
                      0        0 1];

所以你需要的是

Hcumulative = HupScale * HsRt * Hcumulative * HdowScale;

现在您可以应用Hcumulative到原始大小的图像。

于 2013-05-29T05:16:08.897 回答