Преобразование изображения без петли

Я пишу функцию преобразования изображений в 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 ответов

Другие вопросы по тегам