Хобрук: Ваш путь к мастерству в программировании

Scipy.misc.imread сглаживает аргумент, преобразуя его в шкалу серого

Я пытаюсь понять, как этот метод преобразует изображение в шкалу серого (если он использует простое среднее или взвешенное среднее) — я должен сослаться на этот метод.

Из документации я знаю, что этот метод вызывает метод convert(‘F’).

Из исходного кода Pillow/PIL я могу найти это Однако я не смог найти, что он делает, когда для параметра mode установлено значение «F».

Спасибо.


Ответы:


1

В строке документации метода convert объекта Image (видно в коде, на который вы ссылаетесь) есть следующее:

При переводе цветного изображения в черно-белое (режим "L") библиотека использует преобразование яркости ITU-R 601-2:

L = R * 299/1000 + G * 587/1000 + B * 114/1000

По-видимому, так же обрабатывается mode='F'.

Вот пример:

In [2]: from PIL import Image

Создайте массив для демонстрации:

In [3]: x = np.random.randint(0, 9, size=(4, 4, 3)).astype(np.uint8)

Отправьте массив через преобразование в изображение и обратно в массив, используя mode='F' в методе convert:

In [4]: np.array(Image.fromarray(x).convert('F'))
Out[4]: 
array([[ 3.24499989,  6.30499983,  1.86899996,  4.54400015],
       [ 3.54399991,  5.04300022,  4.63000011,  0.29899999],
       [ 2.0539999 ,  3.29900002,  1.85800004,  1.76100004],
       [ 3.9289999 ,  4.76100016,  5.76100016,  2.47799993]], dtype=float32)

Умножьте x на коэффициенты, указанные в строке документации convert:

In [5]: f = np.array([0.299, 0.587, 0.114])

In [6]: x.dot(f)
Out[6]: 
array([[ 3.245,  6.305,  1.869,  4.544],
       [ 3.544,  5.043,  4.63 ,  0.299],
       [ 2.054,  3.299,  1.858,  1.761],
       [ 3.929,  4.761,  5.761,  2.478]])

Если мы конвертируем в np.float32, мы видим точно такие же значения, как созданные методом convert:

In [7]: x.dot(f).astype(np.float32)
Out[7]: 
array([[ 3.24499989,  6.30499983,  1.86899996,  4.54400015],
       [ 3.54399991,  5.04300022,  4.63000011,  0.29899999],
       [ 2.0539999 ,  3.29900002,  1.85800004,  1.76100004],
       [ 3.9289999 ,  4.76100016,  5.76100016,  2.47799993]], dtype=float32)
31.08.2015
  • Вы научная находка. Спасибо, что вытащили это незадокументированное преобразование из исходных данных. Нигде не указано, что преобразование в режим F (с плавающей запятой) обобщает преобразование в режим L (яркость в оттенках серого). В то время как преобразование в режим L приводит результаты к 8-битным целым числам без знака, преобразование в режим F сохраняет дробную часть этого сокращения оттенков серого. Это, в свою очередь, теперь объясняет, почему устаревшая функция scipy.misc.imread() реализует параметр flatten путем преобразования в режим F, а не L. </phew> 21.11.2017

  • 2

    Параметр режима «F» означает «с плавающей запятой».

    from PIL import Image
    
    im = Image.new("F", (2,2))
    pixels = im.load()
    pixels[0,0] = 255.0
    pixels[1,0] = 200.0
    pixels[0,1] = 100.0
    pixels[1,1] = 20.0
    im.show()
    
    31.08.2015
    Новые материалы

    Решения DBA Metrix
    DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

    Начало работы с Блум
    Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

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

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...