Как объединить патчи с matplotlib

#python #matplotlib #patch

Вопрос:

Есть ли какой-либо способ объединить участки с общими краями? Я создаю последовательность патчей в подходящем стиле, используя матрицу для понимания цвета края. Более подробно:

  1. Я прочитал изображение
  2. Я изменяю размер изображения и делю его на плитки размером 64×64
  3. Цикл на каждой плитке и построил матрицу значений, по одному для каждой плитки.

В результате получается фигура с заплатами, которые стилизованы на основе значения матрицы.

Следующий код работает нормально:

 for row in range(0, h, dim):
for col in range(0, w, dim):
c_map2 = [(1,0,0,1),(0,0,1,1),(0.2,0.2,0.2,1),(0,0,0,0),(0,1,0,1)] #position 3 will be not visible
_p = patches.Rectangle((row, col), dim - 1, dim - 1, linewidth=1.5, fill=False, edgecolor=c_map2[int(y_class2)])
plt.gca().add_patch(_p)
 

Вот пример матрицы и рисунок:

 Show classes matrix
[[3. 3. 3. 3.]
 [3. 4. 4. 4.]
 [4. 4. 2. 2.]
 [3. 2. 1. 2.]]
 

Как я могу удалить границу между участками одного и того же цвета, сохранив только внешний край областей одного и того же цвета?

Спасибо.

введите описание изображения здесь

Ответ №1:

Я решил, используя методы matplotlib contour и contourf соответственно для построения периметра ROI и для заполнения ROI. Более подробно:

  1. Я создал маску 1 и 2 для значения x, которое мне нужно было контурировать, где x был заменен на 1, а все остальные значения на 2.

    new_matrix = np.где(old_matrix == 0, 1,2)

  2. Я определяю два уровня:

    уровень 1 = [0,1] уровень 2 = [1,2]

  3. Я нарисовал контур и площадь:

    ax2.контур(новая матрица, уровни1, цвета=’желтый’, ширина линий=1, zorder=1)

    ax3.контур(новая матрица, уровни 1, цвета=’желтый’, альфа=0,5)

    ax3.контур(новая матрица, уровни 2, цвета=’серый’, альфа=0)