【问题标题】:How to apply Thresholding in image processing如何在图像处理中应用阈值
【发布时间】:2016-11-17 19:39:33
【问题描述】:

这是 K 均值算法的示例代码。

k = 5;
[Centroid,new_cluster]=kmeans_algorithm(inv_trans_img,k);

    for i_loop = 1:k
        cluster = zeros(size(inv_trans_img));
        pos = find(new_cluster==i_loop);
        cluster(pos) = new_cluster(pos);
       figure; imshow(cluster,[]);title('K-means');           
    end

我需要从这个 K 均值算法中获取最终图像,并且我需要将该图像传递给阈值处理过程。我按照下面的方式进行操作。

tumour_image=cluster;

n = 512;
binarized_img = zeros(n,n);
sort_val = sort(tumour_image(:));
    mid_val = ceil(length(sort_val)/2);
    threshold = tumour_image(mid_val);
    binarized_img(find(tumour_image>=threshold)) = 1;
    binarized_img(find(tumour_image<threshold)) = 0;
    imshow(binarized_img);title('binarized image');

但现在的问题是,结果只有一个白色图像。我该如何解决这个问题。

【问题讨论】:

    标签: algorithm matlab image-processing k-means


    【解决方案1】:

    你的门槛应该是:

    threshold = sort_val(mid_val);
    

    你需要得到排序值的中位数,而不是tumour_image的中心元素。

    正如@NeilSlater 在 cmets 中提到的那样,您从现有代码中获得全白图像的原因是您偶然从原始图像中选择了一个黑色像素,所以当您设置阈值时,整个图像的值大于或等于该像素。

    对于大部分像素为0 的图像,这仍会为您提供全白图像。解决这个问题的一种方法,最类似于您目前正在做的事情,是采用非零像素的中值。

    mid_val = ceil((find(sort_val, 1)+length(sort_val))/2);
    

    或者,如果您知道自己感兴趣的集群,您可以只保留这些集群。

    binarized_image = tumour_image >= 3;   % keep clusters 3 and above
    

    【讨论】:

    • 问题中的 OP 代码可能偶然选择了一个黑色像素作为阈值
    • @NeilSlater 没错。我可能应该补充一下,谢谢。 :)
    • 谢谢你的回复,但我还是得到了和以前一样的结果。
    • @temp 您可以在您的问题中添加tumour_image 的示例吗?
    • 您的图像可能大部分是黑色的,这会导致更正后的代码仍然失败。
    猜你喜欢
    • 1970-01-01
    • 2021-12-23
    • 2019-07-08
    • 2013-03-11
    • 2020-01-25
    • 2020-09-08
    • 2020-11-12
    • 2021-02-10
    • 1970-01-01
    相关资源
    最近更新 更多