Tec*_*Sam 5 matlab image-processing
这是我原来的形象: 
我已要求用户裁剪它,将其转换为灰度并在其上运行以下代码:
edgeImg = edge(grayImg,'canny',0.23);
Run Code Online (Sandbox Code Playgroud)
这是结果:

我想基本上"切掉"中间圆和外边缘的所有东西.我很难搞清楚如何做到这一点,说实话,我很茫然.
我考虑过试图填写我想要保留在二进制图像中的区域,然后我可以将它用作图章,但我无法想出一种不填充中间圆圈的方法.
有任何想法吗?
谢谢.
编辑:这个白色区域是我想要保留的:

我建议首先不要进行边缘检测,您会丢失与颜色相关的有价值的信息。您可以尝试一些聚类算法,例如K-Means(包括源代码)或其他算法。
聚类完成后,您可以将与聚类相关的像素保留在对象中。可以基于图像中的对象位置(包括图像的裁剪)及其颜色来选择期望的簇。
2 个集群的 K-Means 聚类的代码示例如下:
he = imread('D:\1.jpg');
imshow(he);
cform = makecform('srgb2lab');
lab_he = applycform(he,cform);
ab = double(lab_he(:,:,2:3));
nrows = size(ab,1);
ncols = size(ab,2);
ab = reshape(ab,nrows*ncols,2);
%One cluster for your object and one for background
nColors = 2;
[cluster_idx, cluster_center] = kmeans(ab,nColors,'distance','sqEuclidean', ...
'Replicates',2);
pixel_labels = reshape(cluster_idx,nrows,ncols);
segmented_images = cell(1,3);
rgb_label = repmat(pixel_labels,[1 1 3]);
for k = 1:nColors
color = he;
color(rgb_label ~= k) = 0;
segmented_images{k} = color;
end
%Show both clusters: object and non-object
imshow(segmented_images{1});
figure;
imshow(segmented_images{2});
Run Code Online (Sandbox Code Playgroud)
由此产生的分割效果非常好:

| 归档时间: |
|
| 查看次数: |
1774 次 |
| 最近记录: |