Плохое отображение с pyplot, изображение слишком темное - PullRequest
1 голос
/ 27 апреля 2019

Я работаю над проблемой обработки изображения.

Я создаю функцию, которая применяет к изображению шумы и перец.Вот функция:

def sp_noise(image,prob):

    res = np.zeros(image.shape,np.uint8)
    for i in range(image.shape[0]):
        for j in range(image.shape[1]):
            rdn = random.random()
            if rdn < prob:
                rdn2 = random.random()
                if rdn2 < 0.5:
                    res[i][j] = 0
                else:
                    res[i][j] = 255
            else:
                res[i][j] = image[i][j]
    return res

Проблемы возникают, когда я хочу отобразить результат.

wood = loadPNGFile('wood.jpeg',rgb=False)
woodSP = sp_noise(bois,0.01)

plt.subplot(1,2,1)
plt.imshow(bois,'gray')
plt.title("Wood")
plt.subplot(1,2,2)
plt.imshow(woodSP,'gray')
plt.title("Wood SP")

Я не могу опубликовать изображение напрямую, но вот ссылка:

image

Изображение темнее.Но когда я отображаю значение пикселей

Но когда я отображаю значение пикселей между двумя изображениями, значения совпадают:

[[ 99  97  96 ... 118  90  70]
 [110 110 103 ... 116 115 101]
 [ 79  73  65 ...  96 121 121]
 ...
 [ 79  62  46 ... 105 124 113]
 [ 86  98 100 ... 114 119  99]
 [ 96  95  95 ... 116 111  90]]
[[255  97  96 ... 118  90  70]
 [110 110 103 ... 116 115 101]
 [ 79  73  65 ...  96 121 121]
 ...
 [ 79  62  46 ... 105 124 113]
 [ 86  98 100 ... 114 119  99]
 [ 96  95  95 ... 116 111  90]]

Я также проверяю среднеезначение:

117.79877369007804
117.81332616658703

Видимо проблема исходит от дисплея plt.imshow, но я не могу найти решение

1 Ответ

1 голос
/ 27 апреля 2019

Глядя на документацию из imshow, есть 2 необязательных параметра, vmin, vmax, которые:

При использовании скалярных данных и без явной нормы, vmin и vmax определяют диапазон данных, который охватывает цветовая карта.По умолчанию цветовая карта охватывает весь диапазон значений предоставленных данных.vmin, vmax игнорируются, если используется параметр нормы.

Поэтому, если для этих параметров не заданы значения, диапазон яркости основан на фактических значениях данных, при этом устанавливается минимальное значениечерному цвету, а максимальное значение - белому.Это полезно при визуализации, но не при сравнении, как вы выяснили.Поэтому просто установите vmin и vmax на соответствующие значения (возможно, 0 и 255).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...