문제

보간없이 내 일반 코드 :

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);

이 코드는 블랙 스팟을 만듭니다. 문제는 보간을 수행하는 방법입니다. 조명에 감사드립니다. 추신은 빌드 인 기능을 요구하지 않습니다 : Imrotate (IM1,1/thet, '가장 가까운');

도움이 되었습니까?

해결책

검은 반점없이 이미지를 회전 시키려면 역 방향으로 가야합니다.

회전 행렬의 역수는 그것의 전환입니다. 또한, 회전 된 이미지는 항상 최대 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);

다른 팁

나는 기억한다 이전 질문 비슷한 문제가있었습니다.

내가 가진 아이디어는 픽셀을 반대 방향으로 매핑하는 것이 었습니다. 회전 된 이미지의 각 픽셀에 대해 원본 이미지에서 맵핑하는 픽셀을 찾으면 문제가 훨씬 간단 해집니다.

이 순간 Matlab에 액세스 할 수는 없지만 가능하다고 생각합니다. 여기서 어려움은 회전 된 이미지 픽셀을 반복하는 것입니다 ..

변형 된 픽셀이 모두 있으면 검은 반점을 채울 수 있습니다. griddata 픽셀 (회전 된 픽셀)의 불균일 한 공간 분포를 가져 와서 선형, 입방 또는 선형 입방 또는 필요한 픽셀 (검은 반점)을 보간합니다. 가장 가까운 이웃.

이 라인에 의해 검은 색 스팟을 제거 할 수 있지만 나머지 코드는 동일하게 유지됩니다.

im2= zeros(500,500);
im2(:)=1;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top