【发布时间】:2014-11-09 18:51:17
【问题描述】:
假设我有这个输入图像,带有任意数量的框。我想分割这些盒子,所以我最终可以把它们提取出来。 输入图片:
背景可以是任何连续的东西,例如彩绘墙、木桌、地毯。 我的想法是渐变在整个背景中是相同的,并且具有恒定的渐变。我可以把梯度大致相同的地方变成图像中的零。
通过边缘检测,我会扩大并填充检测到边缘的区域。基本上我的目标是在盒子所在的区域制作一个斑点。有了这些斑点,我就可以知道盒子的确切位置,从而能够从输入图像中裁剪出盒子。 所以在这种情况下,我应该可以有四个 blob,然后我就可以从输入图像中裁剪出四个图像。
这是我走了多远: 分割图像:
query = imread('AllFour.jpg');
gray = rgb2gray(query);
[~, threshold] = edge(gray, 'sobel');
weightedFactor = 1.5;
BWs = edge(gray,'roberts');
%figure, imshow(BWs), title('binary gradient mask');
se90 = strel('disk', 30);
se0 = strel('square', 3);
BWsdil = imdilate(BWs, [se90]);
%figure, imshow(BWsdil), title('dilated gradient mask');
BWdfill = imfill(BWsdil, 'holes');
figure, imshow(BWdfill);
title('binary image with filled holes');
【问题讨论】:
-
我什至没有通过使用
imgradient(query)来使用渐变的大小。我标准化了幅度。如果背景是连续的,我应该能够将对象与前景分开。有什么帮助吗?
标签: image-processing matlab matlab-cvst