2016-05-27 2 views
1

У меня есть функция cp2tform в MatLab. Я предполагаю, что функция cp2tform в Octave, как предполагается, дает тот же результат, что и в MatLab.Разница между функцией MatLab и Octave cp2tform

Проблема в том, что в некоторых случаях выходы различны.


Пример:

MatLab Код:

A = [1,5; 8,7; 10,15]; 
B = [0,7; 0,4; 0,5]; 
cp2tform(A,B,'nonreflective similarity') 

Выход:

-0.148848198464265 -0.305965741287655     0 
    0.305965741287655 -0.148848198464265     0 
    -1.810986414648551 8.610750147666863 1.000000000000000 

октавных Код:

A = [1,5; 8,7; 10,15]; 
B = [0,7; 0,4; 0,5]; 
cp2tform(A,B,"nonreflective similarity") 

Выход:

-0.05960 -0.12252 0.00000 
0.12252 -0.05960 0.00000 
-0.72517 6.64570 1.00000 

Мой вопрос

Что я делаю неправильно?

+0

Мое предположение: используя другую функцию? Код MATLAB, который вы там помещаете, использует 'fitgeotrans' не' cp2tform' .... –

+0

Извините, моя ошибка :) – Kattynka

ответ

4

Это потому, что вы не можете описать преобразование между вашими точками, используя 'nonreflective similarity'.

Правильный ответ: оба MATLAB и OCTAVE ошибочны.

'nonreflective similarity' от MATLAB:

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

enter image description here

Но если вы посмотрите на ваши очки:

enter image description here

Там нет никакого способа, вы можете преобразовать треугольник в линию с вращением перевода и масштабирования. Следовательно, вычисление не выполняется.

+4

Мне понравилась часть, где вы нарисовали свободную красную стрелку и круг. – Suever

+1

Плюс 1 для от руки. Однако, если я могу добавить, как исправить это, используйте ** проективное преобразование **, поэтому замените «нерефлексивное подобие» на «проективный», и вам хорошо идти. – rayryeng

Смежные вопросы