如何裁剪复杂形状图像中的所有黑色像素?

时间:2018-04-28 14:59:22

标签: matlab image-processing

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 :(得分:2)

您可以简单地检测边缘并扩大图像。可以调整参数以获得最佳结果。

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