没有循环的图像变换

时间:2018-03-31 10:37:11

标签: matlab transactions iteration image-translation

我在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

0 个答案:

没有答案