Я писал программу, которая скремблирует цвета каждого пикселя в изображении так, чтобы полученное изображение было очень шумным и трудно распознать, но чтобы оно было нормальным в оттенках серого.
Как толькоЯ написал программу, я заметил проблему.Используемый мной алогритм предполагал, что способ вычисления шкалы яркости был примерно таким:
Grayscale(Pixel p) {
average := (p.red + p.green + p.blue) / 3
p.red := p.green := p.blue := average;
}
. Позже я понял, что к числам привязаны веса:
Grayscale(Pixel p) {
average := (c1 * p.red^gamma) + (c2 * p.green^gamma) + (c3 * p.blue^gamma)
p.red := p.green := p.blue := average
}
, и поэтому моя программа неработа.
Я специально нацелился на фильтр градаций серого iOS, хотя алгоритм должен быть одинаковым для любой системы.
(примечание: я не знаю веса значений iOS,так что если бы кто-нибудь мог дать мне те же алгоритмы, это было бы здорово. Я нашел эту ветку, обсуждающую подобную проблему, но она не отвечает на мой вопрос: https://www.reddit.com/r/compsci/comments/a1yrf1/what_algorithm_do_ios_devices_use_to_grayscale/)
Предполагая, что в градациях серого используются весы определенного типа, какой алгоритм я мог бы использовать для изменения значений rgb данного пикселя, сохраняя при этом значения градаций серого в пикселях одинаковыми?