как извлечь объекты внутри области интереса в Matlab - PullRequest
4 голосов
/ 17 октября 2011

Я заинтересован в извлечении объектов внутри региона.

Например,

На фиг.1 показан профиль интенсивности моего лазерного профиля. В зависимости от интенсивности лазера я делю профиль на 2 области интереса (ROI1 и ROI2).

На рис. 2 показано совпадение моих экспериментальных результатов положительных ответов и профиля интенсивности лазера. Файл данных положительного ответа состоит из координат x и y. Как видите, результаты разбросаны по лазерному профилю изображения.

Вот что я хочу сделать, я хочу извлечь пятна в области ROI2 и отбросить все остальные, как показано на рис. Как мне это сделать? В частности, как я могу определить неправильную форму ROI2 в Matlab и извлечь координаты данных положительного ответа. Спасибо за помощь.

enter image description here

Ответы [ 3 ]

5 голосов
/ 18 октября 2011

Как говорит эйканал, вы можете использовать функцию impoly для создания любого вида ROI, который вы хотите на своем изображении.Общее решение для извлечения координат - это создание требуемой области интереса и использование find для извлечения координат и некоторой операции установки для удаления нежелательных точек.Как это:

imshow(image)
h         = impoly() ;      %# draw ROI1
ROI1      = createMask(h);  %# create binary mask of ROI1
h2        = impoly();       %# draw dummy_ROI consisting of ROI1+ROI2
dummy_ROI = createMask(h2); %# create binary mask
ROI2      = dummy_ROI-ROI1; %# create ROI2

p      = find(ROI2);        %# find all coordinates of ROI2
points = intersect(ind,p);  %# find all points with linear index ind that are
                            %# part of ROI2
3 голосов
/ 18 октября 2011

Я думаю, что эта проблема легче, чем вы думаете, при условии, что вы всегда сегментируете изображение вдоль (как представляется,) контурных линий.Вы хотите выбрать все точки, которые имеют значение больше, чем линия контура 1 и меньше, чем линия контура 2. Я не уверен, как вы указали линии контура, но команда выбора должна быть просто:

#% let laserData be the image data (it looks like it should
#% be 512x256, so I'll assume that)

highBound = mean(contour1points);
lowBound  = mean(contour2points);

selectedData = laserData(laserData > lowBound & laserData < highBound);

Если, как оказалось, вы просто устанавливаете контуры на основе значения, тогда mean(contour1points) может быть заменено пользовательским значением, используя функцию, чтобы получить значение пикселя под курсором, которое я не могувспомнить прямо сейчас.Если вы хотите определить многоугольник, проверьте функцию impoly .

0 голосов
/ 18 октября 2011

Я не знаю, какое представление вы используете для своих ROI, но я бы предложил несколько методов:

  1. Если ваша ROI - это эллипс, и вы знаете, что его уравнение примените только ккоординаты результатов.Используйте знак, чтобы решить, находится ли он внутри или нет

  2. Если ваша РИ является многоугольником, вы можете использовать функцию inpolygon

  3. Вы можете отобразить области интереса на черно-белых изображениях и легко проверить попадание / промах.

Пожалуйста, предоставьте более подробную информацию о представлении области интереса.

...