使用Scikit Learn的KMeans将图像聚为2类后像素值多于2种的原因是什么
KMeans图像分割出现多于聚类数像素值的原因
- 未将原始像素替换为对应聚类的质心值
KMeans推理阶段仅输出每个像素所属的聚类标签(k=2时只会输出0和1两类标签),如果后续你没有把每个像素的数值统一替换为它所属聚类的质心值,而是直接保留原像素数值、或是将标签值和原像素做了额外运算,就会出现多于2种的像素值。正确的处理逻辑是:聚类完成后,所有属于类别0的像素统一赋值为类别0的质心数值,属于类别1的像素统一赋值为类别1的质心数值,最终输出的图像只会保留2种像素值。 - 多通道输出时的逻辑错误
你仅在KMeans输入阶段将红、蓝通道置0,只使用绿色通道做聚类,如果输出可视化图像时没有对三个通道做同步赋值,就可能出现多余的像素值。比如你仅把聚类结果赋值给了绿色通道,红、蓝通道残留了原始非0数值,或是将单通道的聚类结果错误转换为三通道格式,都会组合出更多种类的RGB三元组。 - 数据类型转换异常
图像处理过程中如果涉及到浮点型到uint8类型的转换,操作不当很容易出现数值溢出、截断问题。比如聚类得到的两个质心为80.6和220.3,转换时如果没有做正确的四舍五入或是范围限制,部分像素可能被误赋值为其他整数值。
你可以用np.unique(聚类输出的标签数组)做快速验证,如果返回结果只有0和1两个值,说明KMeans聚类本身没有问题,问题出在后续将标签转换为可视化图像的代码逻辑中。
内容的提问来源于stack exchange,提问作者NIKHIL JOSEPH JOY
相关产品推荐
相关产品推荐

