Как настроить мой код, чтобы получить эту более гладкую/толстую карту расстояний с помощью cv2.distanceTransform?

Я читал статью, в которой использовалось преобразование расстояния для получения карты вероятностей, как показано ниже: enter image description here используя бинарное изображение: enter image description here Карта на бумаге гораздо более «концентрирована и заполнена» (обратите внимание на более жирный желтый цвет и отсутствие заостренных линий) по сравнению с моей: enter image description here

Согласно газете, это то, что описано как:

...convert them to continuous distance maps by a distance transform and normalize them from 0 to 1 to form a probability map

Это мой код:

import numpy as np
import matplotlib.pyplot as plt
import cv2

m = np.zeros((720, 1280), dtype=np.uint8)
pts = np.array([[320, 360], [640, 360], [960, 360]])
# rectangle size
rh, rw = 100, 120

for x, y in pts:
    m = cv2.rectangle(m, (int(x - rw / 2), int(y - rh / 2)), (int(x + rw / 2), int(y + rh / 2)), (255, 255, 255), -1)
m = cv2.distanceTransform(m, cv2.DIST_L2, cv2.DIST_MASK_5)
plt.imshow(m)

Любая идея, как настроить мой код, чтобы приблизиться к тому, что сделал документ?

разные расчеты. они предполагают 100% внутри, и расстояние уменьшается к внешней стороне. ваш расчет предполагает 0% снаружи и растет внутри. -- инвертируйте маску, вычислите расстояние, затем вычислите 1/расстояние или 100-расстояние или что-то в этом роде.

Christoph Rackwitz 09.04.2022 10:43
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
7 лайфхаков для начинающих Python-программистов
7 лайфхаков для начинающих Python-программистов
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
Создание персонального файлового хранилища
Создание персонального файлового хранилища
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это...
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
2
1
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно сначала инвертировать свое изображение m, чтобы ваши ящики стали черными. Затем выполните пороговое значение расстояния:

inv_m = cv2.bitwise_not(m)
dist_img = cv2.distanceTransform(inv_m, cv2.DIST_L2, 3)
norm_img = cv2.normalize(dist_img, dist_img, 0, 1.0, cv2.NORM_MINMAX)

Используя библиотеку scikit image, увеличьте диапазон интенсивности до 255:

scale_img = skimage.exposure.rescale_intensity(norm_img, in_range='image', out_range=(0,255)).astype(np.uint8)

enter image description here

Теперь создайте диапазон в пределах этой шкалы интенсивности, здесь я выбрал входной диапазон (0-30). А затем инвертировать его:

scale_img2 = skimage.exposure.rescale_intensity(scale_img, in_range=(0,30), out_range=(0,255)).astype(np.uint8)
final_img = cv2.bitwise_not(scale_img2)

enter image description here

Этот пост основан на последний ответ от fmw42

Масштабирование градиента - ловкий трюк! Только инвертирование их заставляет их казаться очень резкими на краю. Спасибо за этот фантастический ответ :)

Ryan 09.04.2022 14:52

Другие вопросы по теме