Уточните пиксель, корнинируйте и следите от одной точки к другой, чтобы вычислить извилистость в MATLAB - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь найти извилистость судна на изображении, используя заданную функцию здесь .

Входными данными для функции являются координаты x и y сигнала / судна. В моем случае, если у меня есть судно такого типа:

figimage

Тогда, если я нанесу [x, y] координаты судна, оно будет выглядеть так :

Fig1

Затем функция может отслеживать судно из одной точки в другую и находить индекс извилистости, см. Пример:

fig2

Но если мое судно этого типа:

vesseltest

, чей участок Координаты [x, y] выглядят следующим образом:

fig3

, затем функция отслеживает их зигзагообразно

zigzagtrack

Мои вопросы:

  1. Как сделать так, чтобы судно следило от одного конца к другим конечным точкам, чтобы вычислить извилистость =

  2. Как уточнить координаты судна следующим образом, то есть определить по пикселю сигнала (см. Зеленый сигнал)?

    refine

код:

i1=[91 92 93 94 95 96 97 88 89 90 98 99 100 101 102 103 87 104 105 106 107 84 85 86 108 83 109 110 
    111 112 113 114 115 116 117 117 117 117 117 117 117];
i2=[134 134 134 134 134 134 134 135 135 135 135 135 135 135 135 135 136 136 136 136 136 137 137 137 
    137 138 138 138 139 140 141 141 142 143 144 145 146 147 148 149 150];
 figure, plot(i2',i1','*r')
[VTI, sd, mean_dm, num_inflection_pts, num_cpts, l_arch, l_cord]=vessel_tortousity_index(i2',i1',1);

1 Ответ

0 голосов
/ 26 апреля 2020

если ваши кривые, с которыми вы работаете, в основном имеют выпуклую форму (и ширину 1 пиксель), вы можете вызвать convhull, чтобы вычислить выпуклую оболочку облака точек, а затем удалить самый длинный шнур, чтобы получить изогнутую часть, из которого вы можете вычислить мучительность, попробуйте это

tt=convhull(i2,i1);
plot(i2(tt),i1(tt))
...