#python #matplotlib #patch
Вопрос:
Есть ли какой-либо способ объединить участки с общими краями? Я создаю последовательность патчей в подходящем стиле, используя матрицу для понимания цвета края. Более подробно:
- Я прочитал изображение
- Я изменяю размер изображения и делю его на плитки размером 64×64
- Цикл на каждой плитке и построил матрицу значений, по одному для каждой плитки.
В результате получается фигура с заплатами, которые стилизованы на основе значения матрицы.
Следующий код работает нормально:
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 и 2 для значения x, которое мне нужно было контурировать, где x был заменен на 1, а все остальные значения на 2.
new_matrix = np.где(old_matrix == 0, 1,2)
- Я определяю два уровня:
уровень 1 = [0,1] уровень 2 = [1,2]
- Я нарисовал контур и площадь:
ax2.контур(новая матрица, уровни1, цвета=’желтый’, ширина линий=1, zorder=1)
ax3.контур(новая матрица, уровни 1, цвета=’желтый’, альфа=0,5)
ax3.контур(новая матрица, уровни 2, цвета=’серый’, альфа=0)