Почему Microsoft изменила масштаб своих диапазонов HSL до [0-240]?

Я изучаю цифровую обработку изображений в университете, и сейчас мы делаем работу, в которой нам нужно преобразовать значения RGB в HSL, и это должно быть равно Microsoft Paint. Когда я закончил реализацию, я увидел, что она не равна Paint, и при поиске я обнаружил, что они используют не диапазон [0-360], как обычно, а диапазон [0-240].

Источник

Но даже читая, я не мог понять, зачем это делать.


person Ellyzeul    schedule 20.07.2021    source источник
comment
Потому что байт имеет (по обычному соглашению) значения от 0 до 255, и в любом случае всего 256 значений. Использование памяти эффективно для использования байтов для изображений (для каждого канала). В противном случае вам придется использовать двойную память (два байта, значения до 65535).   -  person Giacomo Catenazzi    schedule 21.07.2021
comment
Это не беспрецедентно. OpenCV масштабирует оттенок в диапазоне от 0 до 180 с разрешением 2 градуса для круга значений на 360 градусов. На самом деле, учитывая даты, это, вероятно, не прецедент — кто-нибудь знает противоположное прецеденту? Последующий?   -  person Mark Setchell    schedule 21.07.2021
comment
Вы не можете хранить значения больше 255 в байте, поэтому требуется масштабирование (хранение в двух байтах было бы неприемлемой тратой).   -  person Yves Daoust    schedule 21.07.2021
comment
Отвечает ли это на ваш вопрос? Почему максимальные значения насыщенности и оттенок 240 и 239 соответственно?   -  person Peter O.    schedule 21.07.2021
comment
@ПитерО. это действительно отвечает на мой вопрос, но я думаю, что ответы Джакомо гораздо более полны, поэтому я должен пометить свой вопрос как дубликат или нет? (Я здесь новенький, поэтому еще не все знаю)   -  person Ellyzeul    schedule 21.07.2021


Ответы (1)


Есть несколько причин.

Мы действительно предпочитаем диапазоны, содержащие всего 256 значений. В таком случае мы можем хранить данные в байте. Мы можем использовать два байта, но таким образом мы удвоим использование памяти. Или просто использовать более 8 бит, но поэтому мы должны выполнять битовую операцию над каждым пикселем, прежде чем делать что-то интересное, что очень неэффективно. Примечание: с двумя байтами мы можем использовать половинные числа с плавающей запятой, которые очень полезны в некоторых случаях, но точки с плавающей запятой также неэффективны при различных вычислениях (но это вы делаете фильтры и композицию слоев).

Вторая причина указана в ссылке, которую вы включили в вопрос, но может потребоваться дополнительная информация: во многих форматах (особенно для видео или телевидения) у нас есть ограниченный диапазон (не от 0 до 255, а от 16 до 235 или 16 до 240). Причин несколько: аналоговый сигнал может иметь больше черного, чем черного (что может быть невозможно), и больше белого, чем белого (реалистично). Мы только что откалибровали телевизор, чтобы определить белые и черные точки (и, возможно, вещатель будет отфильтровывать точки ниже черного. Это было полезно по некоторым причинам (преобразование аналоговых данных, и мы часто видим больше белого, чем белого). С цифровизацией телевидению понадобились аналого-цифровые преобразователи (и обратное).Эти преобразователи стоят (и больше бит: больше затрат), и мы уже использовали данные за пределами видимого цветового диапазона (в аналоговом сигнале) по другим причинам, вне цветов.Так что вместо этого чтобы иметь различное преобразование в зависимости от типа данных (или просто больше битов на преобразователе), мы просто сохраняем ограниченный диапазон).

Для каждой операции с цветом следует проверять диапазон (и определение цветового пространства). Квантование также может быть проблемой (многие профессиональные программы используют плавающие точки, поэтому мы менее ограничены в диапазоне (но есть и другие причины для плавающих точек, например, точность и эффективность при работе в линейном пространстве [без гамма-коррекции]). Примечание: вы должны заботиться только о значении отношения к максимальному значению.Углы имеют различные измерения: 360 градусов, 400 градусов или 2 Пи (самые распространенные, когда-то, особенно в прошлом, вы можете записать их в виде десятичной степени (или других факторов, например, 3600, 36000 или 21600 [градусные минуты]). Пользовательские интерфейсы могут просто отображать другое соглашение (более удобное для пользователей).

И чтобы сделать все более сложным, преобразование HSL не так точно, если вам нужны точные H, S и L (в более строгом определении), просто быстрый ярлык.

person Giacomo Catenazzi    schedule 21.07.2021
comment
Вы должны добавить этот ответ к повторяющемуся вопросу: stackoverflow.com/questions/1290190/ - person Peter O.; 21.07.2021
comment
Я также должен отметить, что соглашение восходит, по крайней мере, к Windows 3.1 или более ранней версии, когда системное диалоговое окно «Цвет» имело диапазон оттенков до 240. - person Peter O.; 22.07.2021