MATLAB - ошибка при отображении пикселей искаженного изображения - PullRequest
0 голосов
/ 30 января 2020

Я пытался использовать матрицу homographi c (которую я должен найти без использования maketform () ), чтобы сопоставить мое изображение с соответствующими точками на моем фоновом изображении. Я прочитал каждый пост, доступный здесь, на stackoverflow и из многих других источников. К сожалению, я делаю что-то не так и понятия не имею, что это такое. Я пытался изменить многие вещи, чтобы понять, что я делаю неправильно, но мне не повезло.

Моя проблема в том, что ошибка связана с индексом элементов в для l oop , Матлаб говорит, что они 0 или отрицательные, в то время как они должны быть положительными целыми числами. Я знаю, что Matlab начинается с 1, но индекс O () в последней строке for, как вы видите, задается операцией ... поэтому я не могу понять, как это исправить.

Я сопоставляю свои точки с:

for i=1:size(I,1)
  for j=1:size(I,2)
    mymap=[i j 1]*Z;
    mymap(1)=int32(mymap(1)/mymap(3));
    mymap(2)=int32(mymap(2)/mymap(3));
    O(mymap(1),mymap(2),:)=I(i,j,:);
  endfor
endfor

, где Z берется из:

[U,S,V]=svd(P)
Z=(reshape(V(:,9), 3, 3)).'

, а P:

P=[
A(1,1), A(1,2), 1, 0, 0, 0, -(A(1,1)*B(1,1)), -(A(1,2)*B(1,1)), -B(1,1);
0,0,1, A(1,1), A(1,2), 1, -(A(1,1)*B(1,2)),-(A(1,2)*B(1,2)), -B(1,2);
A(2,1), A(2,2), 1, 0, 0, 0, -(A(2,1)*B(2,1)), -(A(2,2)*B(2,1)), -B(2,1);
0,0,1, A(2,1), A(2,2), 1, -(A(2,1)*B(2,2)),-(A(2,2)*B(2,2)), -B(2,2);
A(3,1), A(3,2), 1, 0, 0, 0, -(A(3,1)*B(3,1)), -(A(3,2)*B(3,1)), -B(3,1);
0,0,1, A(3,1), A(3,2), 1, -(A(3,1)*B(3,2)),-(A(3,2)*B(3,2)), -B(3,2);
A(4,1), A(4,2), 1, 0, 0, 0, -(A(4,1)*B(4,1)), -(A(4,2)*B(4,1)), -B(4,1);
0,0,1, A(4,1), A(4,2), 1, -(A(4,1)*B(4,2)),-(A(4,2)*B(4,2)), -B(4,2);
]

, где A - матрица точек из ginput, а B - матрица точек изображения, которое я хочу деформировать.

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