Генератор тепловых карт изображения плана этажа

Я хочу создать тепловую карту пола. У меня есть следующие вещи:

  1. Черно-белое изображение пола в формате .png
  2. Массив из трех столбцов, хранящийся в Matlab. -- Первые два столбца указывают координаты X и Y изображения панели пола -- Третья координата обозначает «температуру» этой конкретной координаты.

Я хочу создать тепловую карту пола, которая покажет силу «температуры» в этих координатах. Тем не менее, я хочу отобразить тепловую карту поверх плана этажа, чтобы зрители могли видеть, какие комнаты приводят к какой "температуре".

Есть ли какое-нибудь программное обеспечение, которое выполняет эту работу? Могу ли я использовать Matlab или Python для этого?

Спасибо,

Назмул


person Nazmul    schedule 04.08.2012    source источник


Ответы (2)


Один из способов сделать это:

1) Загрузите изображение плана этажа с помощью Matlab или NumPy/matplotlib.

2) Используйте встроенное обнаружение краев, чтобы найти краевые пиксели на плане этажа.

3) Сформируйте большой список (x, y) мест, где находится ребро на плане этажа.

4) Постройте свою тепловую карту

5) Нанесите точки плана этажа в виде наложения.

Похоже, вы знаете, как выполнять каждый из этих шагов по отдельности, поэтому все, что вам нужно сделать, это найти кое-что о том, как накладывать графики на одну и ту же ось, что довольно просто как в Matlab, так и в matplotlib.

Если вы не знакомы, обратите внимание на такие команды, как meshgrid и surf, возможно, contour и их эквиваленты в Python. Я думаю, что в Matlab есть встроенная функция обнаружения границ Canny. Я считаю, что это было сложнее в Python, но если вы используете библиотеку PIL, библиотеку Mahotas, библиотеку scikits.image и некоторые другие, предназначенные для работы с изображениями, это не так уж плохо. Однако SciPy уже может иметь краевой фильтр, поэтому сначала проверьте его.

Единственным камнем преткновения будет то, что ваши (x, y) данные о температуре не будут совпадать с расположением (x, y) пикселей на изображении. В этом случае вам придется поиграть с некоторым коэффициентом масштаба x и коэффициентом масштаба y, чтобы сначала преобразовать координаты вашей тепловой карты в координаты пикселей, а затем построить тепловую карту, и тогда наложение должно работать.

Это довольно простой способ сделать это; Я предполагаю, что вам просто нужен быстрый и грязный сюжет, чтобы проиллюстрировать, как что-то работает. Этот метод имеет то преимущество, что вы можете легко изменить стиль точек плана этажа, сделав их больше, толще, тоньше, разного цвета или прозрачными, в зависимости от того, как вы хотите, чтобы они взаимодействовали с тепловой картой. Однако, чтобы сделать это по-настоящему, используйте GIMP, Inkscape или Photoshop и наложите тепловую карту на изображение постфактум.

person ely    schedule 04.08.2012
comment
Спасибо за ответ. Я планирую использовать tKinter -> canvas.create_oval и показывать на изображении точки разного цвета. 1. Загрузите изображение с помощью tKinter. 2. Для каждой координаты (x,y) моих данных я хочу использовать что-то вроде: canvas.create_oval(x,y,x+1,y+1,fill=red). Теперь, вместо использования фиксированного цвета, такого как красный, я хочу использовать цвет на основе тепловой карты, который представляет температуру этой точки. Является ли это возможным? - person Nazmul; 13.08.2012
comment
Я уверен, что это возможно, но это слишком. В Matplotlib и NumPy уже есть встроенные функции, которые могут вычислять сетку для ваших точек, а также функции поверхности и сетки, которые могут накладывать тепловые данные. Единственная сложная часть — это наложение границ плана этажа. Я думаю, что вам следует наложить план этажа после отображения тепловой карты, опять же, используя какое-то обнаружение краев на изображении плана этажа, чтобы получить пиксели для границ плана этажа. Это также встроено в такие библиотеки, как Python PIL и SciPy. Пройти весь путь до программирования с графическим интерфейсом для этого излишне. - person ely; 13.08.2012

Я бы рассмотрел использование Python с модулем под названием Polygon.

Многоугольник позволит вам нарисовать комнату с помощью геометрических фигур, и я думаю, что вы можете просто сделать границы комнаты в качестве наложения на ваше черно-белое изображение. Хотя на данный момент я не привык ко многому, я знаю, что вам нужна только одна пара координат (x, y), чтобы иметь возможность «проверить попадание» по заданной форме, а затем использовать этот «проверка попадания» чтобы узнать форму, цвет которой вы хотели бы изменить.

В конечном счете, я думаю, что полигон значительно облегчит вам создание форм комнаты, особенно когда они не являются красивыми прямоугольниками =)

Последнее маленькое замечание. Обязательно прочитайте всю документацию, которая есть у Йорга по его проекту. Я еще не использовал его в среде Python 3.x, но было немного кропотливо запустить его в 2.7.

Мои пять копеек, наслаждайтесь!

person Ben A.    schedule 04.08.2012