-1

scaling画像を読み取り、 x 軸方向に 2 単位のコードを作成しました。Scaling matrixテキストファイルから読み取った値が入力されます。

Scaling Matrixのように見える

2 0 0 
0 1 0 
0 0 1

元の画像

ここに画像の説明を入力

変換された画像(X 方向に 2 単位のスケーリング)

ここに画像の説明を入力

コード

file = importdata('transform_c.txt');
fileData = file.data;
image = imread('mecca06.pgm');
[row, col] = size(image);
scalingMatrix = zeros(3,3);

scalingMatrix(1,1) = fileData(2);
scalingMatrix(1,2) = fileData(3);
scalingMatrix(1,3) = fileData(4);
scalingMatrix(2,1) = fileData(5);
scalingMatrix(2,2) = fileData(6);
scalingMatrix(2,3) = fileData(7);
scalingMatrix(3,1) = fileData(8);
scalingMatrix(3,2) = fileData(9);
scalingMatrix(3,3) = fileData(10);

m1Inverse = inv(scalingMatrix);

outputImage = applyTransformation(image, row, col, m1Inverse);
figure
imshow(outputImage);

function outImage = applyTransformation(image, row, col, m1Inverse)
    points = zeros(3,1);
    for i=1:row
        for j=1:col
            points(1,1) = i;
            points(2,1) = j;
            points(3,1) = 1;
            m2 = m1Inverse * points;

            x = m2(1,1);
            y = m2(2,1);
            xlb = floor(x);
            ylb = floor(y);

           if(xlb <= 0)
             xlb = 1;
           end

           if(xlb > row)
             xlb = row;
           end
           if(ylb <= 0)
             ylb = 1;
           end

           if(ylb > col)
             ylb = col;
           end

           xub = xlb+1;
           yub = ylb+1;

           if(xub <= 0)
              xub = 1;
           end

          if(xub > row)
             xub = row;
          end

          if(yub <= 0)
             yub = 1;
          end

          if(yub > col)
             yub = col;
          end

          exub = xub-x;
          eyub = yub-y;
          exlb = x-xlb;
          eylb = y-ylb;
          outImage(i,j) = (exub*eyub*image(xlb,ylb))+(exlb*eyub*image(xub,ylb))+(exub*eylb*image(xlb,yub))+(exlb*eylb*image(xub,yub));
        end
    end
end

私の質問は、上記のコードを変更してトリミングされていない画像を取得するにはどうすればよいですか?

次の画像を取得したい

ここに画像の説明を入力

4

1 に答える 1