Matlab - Как вручную отследить границу объекта

Я пытаюсь найти и извлечь границу двоичного изображения в Matlab, не используя что-то вроде bwboundaries.

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

Любая помощь будет оценена.

2 ответа

Поскольку он является двоичным, вы можете использовать две пары циклов.

Сначала убедитесь, что изображение является двоичным (на случай, если оно будет пороговым).

- используйте первую пару петель для высоты и одну для ширины и отслеживайте любые изменения, например, если пиксель черный, а следующий - белый, нарисуйте эту точку на новом мате (т.е. пометьте эту точку как 255 или любого цвета, который вы пожелаете)

- Сделайте то же самое для ширины и высоты и сохраните его в другом коврике.

- Затем добавьте оба мата и усредните результат.

Это ручной способ, и он может быть неэффективным. Но он помогает вам изменить процесс, чтобы получить точные преимущества.

(Источник: я использовал эту технику для обнаружения перспективных преобразованных прямоугольников, содержащих штрих-код в java, так как canny edge раньше выдавал слишком много граней из-за линий штрих-кода)

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

d1 = double(imread('cameraman.TIF'))./255;  %# Load the image, scale from 0 to 1
subplot(2,2,1); imshow(d1); title('d1');    %# Plot the original image
d = edge(d1,'canny',.6);                    %# Perform Canny edge detection
subplot(2,2,2); imshow(d); title('d');      %# Plot the edges
ds = bwareaopen(d,40);                      %# Remove small edge objects
subplot(2,2,3); imshow(ds); title('ds');    %# Plot the remaining edges
iout = d1;
BW = ds;
iout(:,:,1) = iout;                           %# Initialize red color plane
iout(:,:,2) = iout(:,:,1);                    %# Initialize green color plane
iout(:,:,3) = iout(:,:,1);                    %# Initialize blue color plane
iout(:,:,2) = min(iout(:,:,2) + BW, 1.0);     %# Add edges to green color plane
iout(:,:,3) = min(iout(:,:,3) + BW, 1.0);     %# Add edges to blue color plane
subplot(2,2,4); imshow(iout); title('iout');  %# Plot the resulting image

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

Другие вопросы по тегам