В общем, есть такая штука как преобразование цветов, скорее всего на уровне видеокарты. Цвет представляется в виде матрицы 1*5:
[R, G, B, A, 255]
R, G, B — это цвета, значение от 0 до 255. A — прозрачность, мы не трогаем — всегда 255. И последнее — константа, ее добавили для расширения возможностей преобразования.
Матрица, на которую умножают эту — 5*5. Там можно писать любые числа, чтобы получить из входящих цветов нужные нам исходящие. Если в результате проеобразования занчение меньше 0, то на выходе будет 0. Если больше 255 — на выходе 255.
Задача: если все цвета R, G, B более некой константы, к примеру более 100, то на выходе должно быть 0, 0, 0. Если меньше 100, то на выходе должно быть 255, 255, 255. Т.е., грубо говоря, все светлые пикселы должны стать черными а все темные — белыми.
Разрешима ли эта задача с помощью умножения матриц? И каков ход ваших мыслей, чтобы понять как ее решить?
Здравствуйте, Shmj, Вы писали:
S>Матрица, на которую умножают эту — 5*5. Там можно писать любые числа, чтобы получить из входящих цветов нужные нам исходящие. Если в результате проеобразования занчение меньше 0, то на выходе будет 0. Если больше 255 — на выходе 255.
S>Задача: если все цвета R, G, B более некой константы, к примеру более 100, то на выходе должно быть 0, 0, 0. Если меньше 100, то на выходе должно быть 255, 255, 255. Т.е., грубо говоря, все светлые пикселы должны стать черными а все темные — белыми.
S>Разрешима ли эта задача с помощью умножения матриц? И каков ход ваших мыслей, чтобы понять как ее решить?
Элементарно.
Но надо 2 преобразования
1. сдвигаем на S=-100
[1,0,0,0,S]
[0,1,0,0,S]
[0,0,1,0,S]
[0,0,0,1,0]
[0,0,0,0,1]
2. умножаем на K=255
[K,0,0,0,0]
[0,K,0,0,0]
[0,0,K,0,0]
[0,0,0,K,0]
[0,0,0,0,1]
Re[2]: Практическая задача на умножение матриц - разрешима?
_>Элементарно. _>Но надо 2 преобразования _>1. сдвигаем на S=-100 _>2. умножаем на K=255
это ты все светлые пиксели сделал белыми, а темные — черными. а нужно наоборот.
не хватает двух действий: домножить на -1, и прибавить 255
Re: Практическая задача на умножение матриц - разрешима?
Здравствуйте, Shmj, Вы писали:
S>Задача: если все цвета R, G, B более некой константы, к примеру более 100, то на выходе должно быть 0, 0, 0. Если меньше 100, то на выходе должно быть 255, 255, 255. Т.е., грубо говоря, все светлые пикселы должны стать черными а все темные — белыми.
S>Разрешима ли эта задача с помощью умножения матриц? И каков ход ваших мыслей, чтобы понять как ее решить?
Нет. С помощью умножения матриц можно сделать линейные преобразования. Напомню, функция f(x) называется линейной, если для любых x и y врдно равенство: f(x+y) == f(x) + f(y).
Преобразование, которое ты хочешь получить, линейным не является. Поэтому с помощью умножения матриц его сделать не получится.
Re[2]: Практическая задача на умножение матриц - разрешима?
Здравствуйте, LuciferSaratov, Вы писали:
S>>Разрешима ли эта задача с помощью умножения матриц? И каков ход ваших мыслей, чтобы понять как ее решить?
LS>Любая матрица описывает непрерывную функцию, что очевидно.
Линейную. Поэтому параболу тоже не построишь, хоть она и непрерывна.
Re[3]: Практическая задача на умножение матриц - разрешима?
Здравствуйте, Pzz, Вы писали:
Pzz>Нет. С помощью умножения матриц можно сделать линейные преобразования.
Линейные сделать можно, но не только лишь их. Есть еще и нелинейные. Перспективные, например, выходят из класса линейных, но тоже описываются матрицей.
Re[3]: Практическая задача на умножение матриц - разрешима?
Здравствуйте, Muxa, Вы писали:
M>это ты все светлые пиксели сделал белыми, а темные — черными. а нужно наоборот. M>не хватает двух действий: домножить на -1, и прибавить 255
Это не важно
можно и наоборот
Нажимаете на стрелочку — и получите цвет вашего преобразования (вторая строчка внизу, после 0,255,255). Test1 — это инверсия, чтобы знать что код преобразования работает.
Re[2]: Практическая задача на умножение матриц - разрешима?
Здравствуйте, Shmj, Вы писали:
S>Почему сдулся? Я привык обкашлять тему, прежде чем вникать.
Пока ты обкашливаешь нормальные разработчики уже давно сдали работу.
S> Даже если выставлю себя дураком — это не важно для меня.
Что то не знать — восе не означает быть дураком. Быть дураком это когда не знать и гордиться этим.
S>Уже понятно что умножение матриц мне не понадобится, скорее всего никогда в жизни. Так, ради любопытства ковыряю.
Остальным кое что другое понятно, но ты оставайся в зоне комфорта.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[4]: Практическая задача на умножение матриц - разрешима?
Здравствуйте, Ночной Смотрящий, Вы писали:
S>>Почему сдулся? Я привык обкашлять тему, прежде чем вникать. НС>Пока ты обкашливаешь нормальные разработчики уже давно сдали работу.
На самом деле разработка — дело довольно гибкое. Матрица преобразования мне ничем не помогла — применил друго вариант.
Таких вещей, которые нужно исследовать — не много, спешки особой нет.
Re[2]: Практическая задача на умножение матриц - разрешима?
Здравствуйте, Pzz, Вы писали:
Pzz>Нет. С помощью умножения матриц можно сделать линейные преобразования. Напомню, функция f(x) называется линейной, если для любых x и y врдно равенство: f(x+y) == f(x) + f(y).
Pzz>Преобразование, которое ты хочешь получить, линейным не является. Поэтому с помощью умножения матриц его сделать не получится.
У него умножение с насыщением, так что нифига не линейные...
Вот смотри, если бы канал был один, то берём матрицу, в которой на диагонали -256, а в правом столбце (который на 255 домножают) пишем 25600/255.
Соответственно для чисел меньше или равно 100 получим +больше255, а для больше -- меньше 0, что с насыщением даст нужное поведение.
Но вопрос всё равно не тривиальный, так как канала три...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: Практическая задача на умножение матриц - разрешима?
Здравствуйте, samius, Вы писали:
S>Линейные сделать можно, но не только лишь их. Есть еще и нелинейные. Перспективные, например, выходят из класса линейных, но тоже описываются матрицей.
Там операция другая
1. Нет насыщения
2. делят на последний канал
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: Практическая задача на умножение матриц - разрешима?
Здравствуйте, Erop, Вы писали:
Pzz>>Преобразование, которое ты хочешь получить, линейным не является. Поэтому с помощью умножения матриц его сделать не получится. E>У него умножение с насыщением, так что нифига не линейные...
Если с насыщением, то да. А что, оно просто все, что больше 255, считает равным 255?