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, но это зависит от ваших требований.