2016-05-28 2 views
0

Мне нужно найти координаты x и y бинарного изображения. Вот пример изображения для кода (квадратной формы) fig1 fig2 fig3Как я могу получить значения x и y в координатах оси вместо положения матрицы?

And use the codes as below: 


a=imread('square.png'); 
b=im2bw(a); 
figure(1) 
imshow(b) %%show image in normal axis 
sz=size(b); 
RI=imref2d(size(b)); 

xmin=-sz(2)/2; 
xmax=sz(2)/2; 
ymin=-sz(1)/2; 
ymax=sz(1)/2; 
RI.XWorldLimits=[xmin xmax]; 
RI.YWorldLimits=[ymin ymax]; 
figure(2) %%show image is desired axes where zero is centered of axes 
imshow(b,RI); 
[x,y]=find(b==0); 
figure(3) 
scatter(x,y) 

Рис (1) исходного изображения. Рисунок (2) является одним и тем же изображением, но показан на другой оси (т. Е. Нуль центрируется по осям x и y). Затем я ищу координаты x и y интересующей области (в этом примере квадратный кадр). Но координаты x и y, которые я получаю, не согласуются с осью из рисунка (2). Согласно рисунку (2), координаты x и y квадратной формы должны быть как -ve, так и + ve. Но все координаты x и y имеют значения + ve. Я смотрю, в чем проблема, а затем я заметил, что значения x и y от [x,y]=find(b==0) соответствуют их положениям в матрице, а не координатам осей. Итак, что мне делать, если я хочу показать x и y в координатах осей? Tks.

+0

Выходы 'find' будут' [строка, столбец] '' т.е. [у, х] '* не *' [х, у] ' – Suever

+0

привет @Suever, я попытался, как вы предложили. Я меняю код как «[y, x] = find (b == 0)», но я думаю, что он все еще показывал значения x и y как позиции матрицы, но не координаты осей. Я что-то пропустил? Спасибо заранее. – Teddy

+0

@Teddy Также не забудьте назвать «осейное изображение» для всех осей, чтобы гарантировать, что направление y согласовано. – Suever

ответ

0

Прежде всего, у вас есть выходы find. Он возвращает строки и столбцы неx и y как вы писали. Таким образом, вы должны фактически указать выходы [y,x].

[y,x] = find(b == 0); 

Тогда вы также хотите, чтобы убедиться, что ваше направление у точечного графика осей переворачивается (с использованием axis image), потому что это то, что imshow (ваши другие цифры) используется по умолчанию.

scatter(x,y) 
axis image 

Update

Если вы хотите, чтобы преобразовать эти координаты к центру координаты вы показали, вы должны будете применить то же преобразование к x и y до вызова разбросом.

x = x + xmin; 
y = y + ymin; 

scatter(x,y) 
+0

привет @Suever. Большое спасибо за ваш добрый совет. Я добавил больше цифр в свой первоначальный пост, поэтому будет более понятно. На рис. 2 оси x и y имеют нулевое значение в центре и имеют значения + ve и -ve. Но на рис. 3 оси не «центрированы по ноль», а все оси + ve значений. Я хочу, чтобы рисунок 3 отображался как оси fig2. Надеюсь, что яснее, что хочу. Ткс снова. – Teddy

+0

@ Teddy Я обновил свой ответ. Вы должны применить преобразование 'xmin' и' ymin' к вашим векторам 'x' и' y'. – Suever

+0

ohh wow .. Большое спасибо @Suever. Это действительно то, что мне нужно !!!. – Teddy