Что происходит, так это то, что ваше изображение автоматически нормализуется при построении графика. Вот почему в некоторых регионах (где все они приблизительно одинаковы по цвету) значения растягиваются до каждого предела, выделяя пикселизации от сжатия JPEG. Но затем, когда он соединен, у него темные цвета от границы, поэтому цвета не выдуваются.
Для ясности это означает, что ваши блоки не пикселированы, они просто отображаются вам таким образом в matplotlib
.
Чтобы нормализовать все ваши изображения одинаково, используйте аргументы vmin
и vmax
в plt.imshow()
. Из imshow()
документов :
vmin, vmax : скаляр, опционально
При использовании скалярных данных и без явной нормы vmin и vmax определяют диапазон данных, который охватывает цветовая карта. По умолчанию цветовая карта охватывает весь диапазон значений предоставленных данных. vmin , vmax игнорируются, если используется параметр нормы.
Акцент добавлен мной.
Другими словами, самое низкое значение вашего изображения установлено на черный, а самое высокое значение на белый. Если ваше изображение имеет только значения 123, 125, 127, 129, 131, это означает, что они (эффективно) отображаются на значения яркости 0, 51, 102, 153, 204, 255 (или около того). Так что вещи, близкие по цвету, выдуваются в совершенно разные цвета. Обычно артефакты сжатия jpeg не слишком заметны, так как цвета похожи, но при растягивании это очень очевидно.
Чтобы использовать аргументы и устранить проблему с заговором, замените
plt.imshow(array2, 'gray')
с
plt.imshow(array2, 'gray', vmin=0, vmax=255)