Как обрезать все черные пиксели на сложном изображении? - PullRequest
0 голосов
/ 28 апреля 2018

enter image description here

У меня есть изображение змеи. Конечно, змея изогнута, поэтому я хочу извлечь змею из изображения.

Фон весь черный, поэтому я думаю, что это должно быть относительно прямым. Моя попытка сейчас не подходит достаточно близко. Я надеялся обвести вокруг кривой, а не просто бросить произвольную коробку вокруг змеи. Возможно ли это?

Вот что у меня есть:

 bw = im2bw(test, graythresh(test));
 [row, col] = find(bw);
 topLeftRow = min(row);
 topLeftCol = min(col);
 bottomRightRow = max(row);
 bottomRightCol = max(col);
 maskedImage = bsxfun(@times, test, cast(bw, class(test)));
 extractedSnake = maskedImage(topLeftRow:bottomRightRow, topLeftCol:bottomRightCol, :);


  [![enter image description here][1]][1]

1 Ответ

0 голосов
/ 28 апреля 2018

Вы можете просто обнаружить края и расширить изображение. Параметры могут быть скорректированы для лучшего результата.

im = rgb2gray(imread('blkil.jpg'));

figure,
subplot(1,4,1)
imshow(im)
title('Original')

% Detect edges
subplot(1,4,2)
BW1 = edge(im,'Canny');
imshow(BW1)
title('Edges')

% Dilate
subplot(1,4,3)
se = strel('disk',12);
BW2 = imdilate(BW1,se);
imshow(BW2)
title('Dilated')

% Detect resulting edges
subplot(1,4,4)
BW3 = edge(BW2,'Canny');
imshow(BW3)
title('Result shape')

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...