Удалить выбросы в изображении после применения порога - PullRequest
0 голосов
/ 14 января 2019

Вот сделка. Я хочу создать маску, которая визуализирует все изменения между двумя изображениями (GeoTiffs, которые преобразуются в двумерные массивы).

Для этого я просто вычитаю значения пикселей и нормализую абсолютное значение вычитания:

Formula

Поскольку результат будет покрыт шумом, я использую порог и удаляю все пиксели со значением ниже определенного предела.

def treshold(array, thresholdLimit):
      print("Treshold...")
      result = (array > thresholdLimit) * array
      return result

Это работает без проблем. Теперь приходит проблема. При применении порога остаются выбросы, которые не предназначены:

enter image description here

Какой хороший способ устранить эти выбросы? Иногда выбросы - это маленькие кусочки пикселей, например, 5-6 пикселей вместе, как их можно удалить?

Кроме того, я использую изображения размером около 10000x10000 пикселей.

Буду признателен за все советы!

РЕДАКТИРОВАТЬ:

Оба изображения представляют собой спутниковые изображения, покрывающие одну и ту же область. Разница здесь в том, что одно изображение показывает облачность, а другое - без облаков. Яркая змеиная линия в правом верхнем углу является частью реки, которая была покрыта облаком. Поскольку водоемы, такие как океан или реки, изображены черными на этих изображениях, разница между ярким облаком и темной рекой приводит к тому, что река демонстрирует высокую степень изменения.

Я надеюсь, что следующие изображения проясняют это:

Исходный текст: enter image description here enter image description here

Результат вычитания: enter image description here

Я также пытался сгладить результат установления порога с помощью медианного фильтра, но результат все еще был покрыт выбросами:

from scipy.ndimage import median_filter

def filter(array, limit):
        print("Median-Filter...")
        filteredImg = np.array(median_filter(array, size=limit)).astype(np.float32)
        return filteredImg

1 Ответ

0 голосов
/ 15 января 2019

Я бы предложил следующее:

  1. Прежде чем продолжить, пожалуйста, проверьте, не зарегистрированы ли два изображения: 100% зарегистрировано . Чтобы проверить, что вы должны наложить их, используя, например, разные цветовые каналы. Даже минимальные ошибки регистрации могут сделать вашу задачу невозможной
  2. Сглаживание обоих входных изображений слегка (до вычитания). Для этого я бы предложил вам использовать стандартных реализаций . Поиграйтесь с параметрами фильтра, чтобы найти приемлемый компромисс между плавностью (или уменьшением зернистости исходного изображения 1) и разрешением
  3. Затем попытайтесь сопоставить статистику изображения, применив нормализация гистограммы , используя гистограмму изображения 2 в качестве цели для гистограммы изображения 1. Для этого вы также можете использовать, например, например. реализация OpenCV
  4. Вычесть изображения
  5. Если вы все еще наблюдаете явный шум, посмотрите на гистограмму результата вычитания и посмотрите, можете ли вы связать шум с выбросами интенсивности. Если вы можете четко разделить сигнал и шум в зависимости от интенсивности, снова примените пороговое значение (определяется вашей гистограммой). В качестве альтернативы (или дополнительно), если шум структурно отличается от вашего сигнала (например, кластерный), вы можете изучить морфологические операции , чтобы удалить его.
...