12

補間なしの私のプレーンコード:

im1 = imread('lena.jpg');imshow(im1);    
[m,n,p]=size(im1);
thet = rand(1);
m1=m*cos(thet)+n*sin(thet);
n1=m*sin(thet)+n*cos(thet);    

for i=1:m
    for j=1:n
       t = uint16((i-m/2)*cos(thet)-(j-n/2)*sin(thet)+m1/2);
       s = uint16((i-m/2)*sin(thet)+(j-n/2)*cos(thet)+n1/2);
       if t~=0 && s~=0           
        im2(t,s,:)=im1(i,j,:);
       end
    end
end
figure;
imshow(im2);

このコードはブラックスポットを作成します、問題は補間を行う方法ですか?イルミネーションありがとうございます。PS組み込み関数を要求しない:imrotate(im1,1 / thet、'nearest');

4

4 に答える 4

11

黒い斑点なしで画像を回転するには、逆方向に移動する必要があります。

回転行列の逆は、その転置です。また、回転した画像は常に大きくなり、最大で 45 度回転します。したがって、sqrt(2)要因

im1 = imread('lena.jpg');imshow(im1);  
[m,n,p]=size(im1);
thet = rand(1);
mm = m*sqrt(2);
nn = n*sqrt(2);
for t=1:mm
   for s=1:nn
      i = uint16((t-mm/2)*cos(thet)+(s-nn/2)*sin(thet)+m/2);
      j = uint16(-(t-mm/2)*sin(thet)+(s-nn/2)*cos(thet)+n/2);
      if i>0 && j>0 && i<=m && j<=n           
         im2(t,s,:)=im1(i,j,:);
      end
   end
end
figure;
imshow(im2);
于 2009-12-03T23:50:31.810 に答える
6

同様の問題を抱えていたSOに関する以前の質問を覚えています。

私が思いついたのは、ピクセルを反対方向にマッピングすることでした。回転した画像の各ピクセルについて、元の画像でそれに対応するピクセルを見つけると、問題ははるかに単純になります。

現時点では MATLAB にアクセスできませんが、実行可能だと思います。ここでの問題は、回転した画像ピクセルをループすることです..

于 2009-11-28T03:18:32.010 に答える
0

すべての変換されたピクセルを取得したら、ピクセルgriddataの不均一な空間分布 (回転したピクセル) を取り込む黒いスポットを塗りつぶし、線形、立方体、または最近傍を使用して必要なピクセル (黒いスポット) を補間します。 .

于 2009-11-28T07:06:24.700 に答える
0

ブラック スポットは次の行で削除できますが、残りのコードは同じままです。

im2= zeros(500,500);
im2(:)=1;
于 2013-01-13T16:23:49.500 に答える