algorithm - 如何在图像处理中应用阈值处理

标签 algorithm matlab image-processing k-means

这是 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');

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

最佳答案

你的阈值应该是:

threshold = sort_val(mid_val);

您需要获取排序值的中位数,而不是 tumour_image 的中心元素。

作为@NeilSlater在评论中提到,您从现有代码中获得全白图像的原因是您偶然从原始图像中选择了一个黑色像素,因此当您设置阈值时,整个图像大于或等于该像素的值。

在大多数像素为 0 的图像的情况下,这仍然会给您一个全白图像作为结果。解决此问题的一种方法,也是与您当前正在做的最相似的方法,是取非零像素的中值。

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

或者,如果您知道您对哪些集群感兴趣,您可以只保留那些集群。

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

关于algorithm - 如何在图像处理中应用阈值处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38381797/

相关文章:

algorithm - 在红黑树中旋转后重新着色时要遵循的规则

arrays - 给定排序的整数数组,写一个基于分治法的算法 A[i]=i

algorithm - 优化数组压缩

matlab - 了解提取特征的编码

image-processing - 只需 2 张图像即可自动进行人脸验证

algorithm - 如何为 Min-Max 算法编写分析函数?

algorithm - 如何在 stxxl 中查找程序的 I/O 数?

c - 外部变量 mex 文件

java - 使用java在openCV中使用Mat

java - Java 中的 setRGB()