1

我在 matlab 中编写图像转换函数,而不是使用像“imwarp 或 imtransform”这样的预定义函数。我已经大致完成了代码的编写,但是由于使用了循环,它花费的时间太长。请给我一个解决方案,它可以在没有循环的情况下达到相同的结果

 function I2 = f_transform(A, I1)
%A is an affine transformation matrix
%I1 is original image to be transformed
      s=size(A);
      if(s(1)~=3 || s(2)~=3)
          disp("Invalid Transforming Matrix");
          I2=0;
          return;
      end
      if(det(A)==0)
          disp("The given Transforming Matrix is Singular");
          I2=0;
          return;
      end
      [r, c]=size(I1);
      extremeValues = [1 1 r r ; 1 c 1 c; 1 1 1 1];
      newExtremeValues = A * extremeValues;
      minRow = floor( min( newExtremeValues(1,:) ) );
      maxRow = ceil( max( newExtremeValues(1,:) ) );
      minCol = floor( min( newExtremeValues(2,:) ) );
      maxCol = ceil( max( newExtremeValues(2,:) ) );
      I2 = zeros(maxRow - minRow + 1, maxCol - minCol + 1);
      for i = minRow:maxRow
          for j=minCol:maxCol
              b = A \ [i j 1]';
              p = b(1) / b(3);
              q = b(2) / b(3);
              if(p >= 1 && p <= r && q >= 1 && q <= c)
                  I2(i - minRow + 1, j - minCol + 1) = I1(round(p),round(q));
              end
          end
      end
      I2 = uint8(I2);
      return;
end
4

0 回答 0