2013-11-25 4 views
1

У меня есть изображение bw, которое имеет черный фон и содержит несколько белых пикселей (например, звезд в ночном небе). Сначала выбирается один из этих пикселей, а его координаты сохраняются в матрице 1 * 2 с именем FirstPixel. Затем все остальные пиксели выбираются один за другим. Строки и Cols - это два 1 * numel (find (pic)) матрицы, содержащие координаты X и Y этих пикселей соответственно.
Я хочу нарисовать линию между первым выбранным пикселем и всеми другими пикселями, которые в основном выглядят как лучи света, испускаемые из источника FirstPixel.Нарисуйте линию между одним конкретным пикселем и рядом других пикселей.

Я написали несколько кодов, используя plot ... но ответ был ужасно неправильным!

pic = imread('interest points'); 
figure, imshow (pic); 
hold on 
plot([Rows (1,:)' Cols (1,:)'],[FirstPixel (1,1)' FirstPixel (1,2)'], 'r-'); 

любая помощь ?!

Заранее спасибо :)

ответ

1

Два Доводы «сюжета» являются значения X и Y, а не первой и второй точек, как вы сделали. Кроме того, необходимо дать numel раз ваш firstpixel, попробуйте с этим:

NUMEL = numel(find(pic)); 
hold on 
plot([Rows; ones(1,NUMEL)*FirstPixel(1)],[Cols; ones(1,NUMEL)*FirstPixel(2)],'-k'); 
+0

Этот ответ довольно смутил меня, пока я не понял, что «Строки» в вопросе фактически относятся к X-координатам (которые я лично нахожу немного назад). Теперь у меня это есть. Благодарю. – mags

0

Тот факт, что Rows представляют координаты х в вопросе (и Cols у-координаты) можно сделать принятый ответ немного сбивает с толку.

Я не знал, как прояснить это для будущих читателей, кроме как дать новый ответ.

Вот полный пример кода, имитирующий сценарий в вопросе, но с rows, представляющим координаты y и cols координаты x.

% replicate scenario (using 4 points) 
I = uint8(zeros(256, 256)); 
I(124, 115) = 255; 
I(139, 165) = 255; 
I(12, 185) = 255; 
I(124, 185) = 255; 

n = numel(find(I)); 
[rows, cols] = ind2sub(size(I), find(I)); 
rows = rows'; 
cols = cols'; 
pixels = [rows; cols]'; 
firstPixel = pixels(1,:); 

% show image and plot overlay 
imshow(I); 
hold on; 
plot([cols; ones(1,n)*firstPixel(2)], [rows; ones(1,n)*firstPixel(1)], '-r'); 

Вот итоговый участок.

lines_between_points

Я надеюсь, что это помогает будущим посетителям, которые имеют эту проблему.

+0

да @mags, на самом деле я сделал это изменение кода, чтобы заставить его работать в моем случае ... и мне было плохо не указывать его на будущих читателей. Спасибо за ваше разъяснение :) – Leo

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