使用kmeans在图像之间的差异上标记0和1

2024-05-29 10:52:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数组,X和Y,我想用k-means来确定像素在图像X和Y之间的变化

我可以简单地把它们区别开来,说:哪里是零,没有改变,哪里大于零:改变了。但我的要求是使用k-means

比如,我有以下图像:

imX = np.array([
    [154, 157, 157, 157, 150, 150, 170, 170, 175, 190],
    [154, 157, 157, 151, 153, 155, 180, 180, 170, 190],
    [154, 157, 150, 154, 160, 160, 160, 155, 155, 165],
    [157, 157, 148, 148, 148, 160, 150, 155, 155, 165],
    [100, 102, 104, 157, 142, 180, 170, 165, 10, 20],
    [100, 103, 105, 165, 155, 180, 175, 162, 40, 50],
    [100, 102, 108, 132, 180, 180, 172, 167, 25, 63],
    [18, 28, 48, 12, 13, 20, 5, 15, 30, 40],
    [15, 36, 46, 18, 21, 22, 28, 32, 30, 36],
    [17, 21, 24, 26, 35, 45, 28, 30, 40, 20]
])

imY = np.array([
    [152, 156, 157, 156, 149, 150, 170, 160, 175, 190],
    [154, 159, 157, 151, 153, 155, 180, 180, 170, 190],
    [153, 157, 155, 154, 160, 160, 160, 155, 155, 165],
    [157, 157, 148, 148, 148, 160, 150, 155, 155, 165],
    [101, 102, 104, 159, 143, 180, 170, 165, 110, 220],
    [99, 103, 105, 164, 155, 179, 175, 162, 240, 250],
    [100, 102, 108, 132, 180, 180, 172, 167, 155, 163],
    [118, 123, 148, 129, 109, 120, 155, 215, 140, 180],
    [156, 136, 210, 218, 175, 122, 128, 232, 180, 156],
    [178, 231, 245, 226, 215, 145, 188, 230, 170, 140],
])

Thus using k-means to do this, I was asked to normalize the data, i.e. normalized difference between the two images:

diff = abs(imX-imY)
normDiff = (diff - diff.min()) / (diff.max() - diff.min())

现在,我不知道如何使用sklearn的k-means来标记更改为1和0的像素值,否则,社区有什么线索吗

我研究了.labels_uu和.cluster_u中心,当模型适合标准化图像差异,但没有帮助时。有什么提示吗


Tags: theto图像npdiff像素数组min
1条回答
网友
1楼 · 发布于 2024-05-29 10:52:29

我认为这不是一个很好的任务

无论如何,这个想法可能是将变化量化为两个箱子。将所有差异作为一个平面(n,1)数据集(n=h*w)进行处理。运行k=2的k-means以获取标签。选择平均值较大的标签为1,另一个为0。获取标签数组并将其重新整形为(w,h)以获取二维图像。应该很简单

相关问题 更多 >

    热门问题