Маркировка 0 и 1 на разнице между изображениями с использованием k-средних - PullRequest
0 голосов
/ 24 марта 2019

У меня есть два массива, X и Y, и я хотел бы использовать k-средства, чтобы определить, где пиксель изменился между изображениями X и Y.

Я мог бы просто сделать разницу между ними и сказать: где ноль, а не изменение, где больше нуля: изменение. Но у меня есть требование сделать это с помощью k-средних.

Скажите, у меня есть следующие изображения:

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],
])

Таким образом, используя для этого k-средства, меня попросили нормализовать данные, то есть нормализовать разницу между двумя изображениями:

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

Теперь я понятия не имею, как использовать k-средства Склеарна, чтобы отметить значения пикселей, которые изменились на 1 и 0, в противном случае , Любая подсказка от сообщества?

Я исследовал .labels_ и .cluster_centers, когда модель соответствует разнице в нормализованном изображении, но не помогает. Есть намеки?

1 Ответ

0 голосов
/ 24 марта 2019

Я не думаю, что это довольно хорошее задание ...

В любом случае, идея, вероятно, состоит в том, чтобы квантовать изменение в две ячейки. Так что все отличия в виде плоских значений велики (n, 1) набор данных (с n = h * w).Запустите k-means с k = 2, чтобы получить метки.Выберите метку с большим средним значением, равным 1, а другим - 0. Получите массив меток и измените его обратно в (w, h), чтобы получить 2-мерное изображение.Должно быть довольно простым.

...