Странный артефакт при попытке конвертировать изображение в полярное и обратно в matlab - PullRequest
0 голосов
/ 21 июня 2019

Пытаясь преобразовать изображение обратно из полярного в прямоугольное, я не могу заставить свой код покрывать каждый угол в полярном изображении, поэтому я попытался решить эту проблему путем преобразования изображения обратно на каждую половину, но я заканчиваю до получения линейного артефакта в середине изображения. Я хочу знать, как заставить преобразование работать для всех углов при переходе от полярного к декартовому.

img = imread('trees.tif');
% img=img';

%% Cart2pol

[m,n]=size(img);
m0=floor(m/2);
n0=floor(n/2);

% [idx,mp]=gray2double(img,32);

x=(1:n)-(n/2);
y=(1:m)-(m/2);

[xp,yp]=meshgrid(linspace(0,2*pi,3000),linspace(0,400,3000));

[xx,yy]=pol2cart(xp,yp);

img=double(img);
out=interp2(x,y,img,xx,yy);

figure(1)
imshow(out,[])

%% pol 2 cart

x=(1:n)-(n/2);
y=(1:m)-(m/2);
r=linspace(0,-2*pi,3000);
t=linspace(0,400,3000);

[xc,yc]=meshgrid(x,y);
[xx,yy]=cart2pol(xc,yc);

out1=interp2(r,t,out,xx,yy);
out1(isnan(out1))=0;
out1=flipud(out1);


out2=interp2(r,t,fliplr(out),xx,yy);
out2(isnan(out2))=0;

done = out1+out2;

figure(2)
subplot(2,2,1);imshow(out1,[])

subplot(2,2,2);imshow(out2,[])

subplot(2,2,3);imshow(img,[])

subplot(2,2,4);imshow(done,[])

1 Ответ

0 голосов
/ 22 июня 2019

Я думаю, вам просто нужно правильно центрировать x, y вокруг начала оси.

Заменить:
x=(1:n)-(n/2);
y=(1:m)-(m/2);

С:

x=(1:n)-(n/2) - 0.5;
y=(1:m)-(m/2) - 0.5;

Результатпосле исправления:
Result after correction

Результат до исправления:
Result before correction

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...