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

时间:2016-07-14 18:37:57

标签: 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');

但现在的问题是,结果只会出现白色图像。我怎么能解决这个问题。

1 个答案:

答案 0 :(得分:1)

您的门槛应为:

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