2016-07-14 90 views
0

这是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均值算法,我需要传递图像阈值处理process.I做到了像下面。

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

你的门槛应该是:

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 
+0

OP的代码在问题中可能偶然选择了一个黑色像素作为阈值 –

+0

@NeilSlater准确无误。我应该补充一点,谢谢。 :) – beaker

+0

感谢您的回复,但仍然收到与以前相同的结果。 – temp