matlab - "Cut out"基于边缘检测的图像

标签 matlab image-processing

这是我的原始图片:Weld Nut

我已经要求用户对其进行裁剪,将其转换为灰度并在其上运行这行代码:

edgeImg = edge(grayImg,'canny',0.23);

这是结果:

Edges

本质上,我想“切掉”中间圆圈和外边缘的所有内容。我真的很难弄清楚如何做到这一点,老实说我很茫然。

我考虑过把二值图像中我想保留的区域填上,然后我就可以把它当作一个图章,但是我想不出一个不填满中间圆圈的方法

有什么想法吗?

谢谢。

编辑:这个白色区域是我想保留的:

Highlighted

最佳答案

我建议首先不要进行边缘检测,你会丢失与颜色相关的有值(value)的信息。您可以尝试一些聚类算法,例如 K-Means (including source code)或其他任何东西。

聚类完成后,您可以将与聚类相关的像素与对象一起保留。可以根据图像中的对象位置(包括图像裁剪)及其颜色来选择所需的聚类。

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});

生成的分割非常好:

enter image description here enter image description here

关于matlab - "Cut out"基于边缘检测的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29827158/

相关文章:

string - 删除元胞数组中字符串中的重复字符

matlab - 如何在 Octave 中找到函数的导数?

MATLAB 按键对Containers.Map(key, value) 进行排序

c++ - Matlab 到 Opencv 代码

matlab - matlab 中 hsv 图像表示的范围是哪些?

c++ - 融合多个 Haar 分类器进行人脸检测

matlab - 给定一个向量 a=[1,2, 3.2, 4, 5] 和一个元素 x=3 在向量 a 中,如何找到大于 x 的确切条目?

matlab plot with axis for each plot only on side

c++ - OpenCV 3 中的 PCA 错误

python - 图像处理 : how to imwarp with mask on destination