Трудности с фильтром контрастности
От: sureec  
Дата: 03.11.03 18:40
Оценка:
Нужно в общем написать фильтр контрастности
который в доках от мелкософта — не годится он для 256 цветов.
Встал вопрос вот в чем. Для того чтобы изменить контраст — нужна палитра (или есть другой алгоритм?)
Соответственно нужно знать сколько цветов заюзано в кадре
Получить biClrUsed из BitmapInfoheader или videoinfoheader (у этого даже есть truecolorinfo но от него тожа мало чего добьешься) ничего результативного не принесли.
Входной поток разрешил для простоты пока 24 или 32 бита. Ессесно все цвета цевта картинка не может юзать. Вопрос как получить все цвета картинки? или если существует другой путь для изменения контрастности подскажите пожалуйста.
Re: Трудности с фильтром контрастности
От: uzzy Россия  
Дата: 04.11.03 03:55
Оценка:
Здравствуйте, sureec, Вы писали:

S>Нужно в общем написать фильтр контрастности

S>который в доках от мелкософта — не годится он для 256 цветов.
S>Встал вопрос вот в чем. Для того чтобы изменить контраст — нужна палитра (или есть другой алгоритм?)
S>Соответственно нужно знать сколько цветов заюзано в кадре
S>Получить biClrUsed из BitmapInfoheader или videoinfoheader (у этого даже есть truecolorinfo но от него тожа мало чего добьешься) ничего результативного не принесли.
S>Входной поток разрешил для простоты пока 24 или 32 бита. Ессесно все цвета цевта картинка не может юзать. Вопрос как получить все цвета картинки? или если существует другой путь для изменения контрастности подскажите пожалуйста.

Точно не помню что написано в мелкософте, но что-то мне подсказывает, что там идет речь не о 256 цветах, а 256 яркостях (интенсивности сигнала).
... << RSDN@Home 1.1 beta 2 >>
Re[2]: в продолжение сказанному
От: uzzy Россия  
Дата: 04.11.03 04:41
Оценка: 10 (2)
U>Здравствуйте, sureec, Вы писали:

Задача контрастирования связана с улучшением согласования динамического диапазона изображения и экрана, на котором выполняется визуализация. Если для цифрового представления каждого отсчета изображения отводится 1 байт (8 бит) запоминающего устройства, то входной или выходной сигналы могут принимать одно из 256 значений. Обычно в качестве рабочего используется диапазон 0...255; при этом значение 0 соответствует при визуализации уровню черного, а значение 255 — уровню белого


Я полагаю тебя смутило выделенное. Так ничего, это нормально. Здесь имелось в виду полутоновые изображения (градации серого; почти то же, что и яркость; почти то же, что и интенсивность сигнала (последнее более правильное для изображений)). Поэтому для "полноцветных" изображений все, что тебе надо, так это обработка изображений в единицах интенсивности.

Далее, если не ошибаюсь, ты используешь формулу типа:

Y = [(X - Xmin)(Ymax - Ymin)]/(Xmax - Xmin) + Ymin          (*)


где:
  • Xmin, Xmax — соответственно минимальная и максимальная интесивности сигнала исходного изображения.
  • Ymin, Ymax — соответственно желаемые минимальная и максимальная интесивности сигнала получаемого изображения.
  • X — интенсивность в обрабатываемой точке изображения
  • Y — новая интенсивность.

    Далее предполагаю, что ты работаешь с RGB представлением изображения (судя по 24 и 32 битам). Если так, для получения интенсивности сигнала можно воспользоваться несколькими приемами:
    1. Перевести изображение в формат HSB
    Автор: B_A_D
    Дата: 03.11.03
    (Special thanks to B_A_D )
    2. Эксперемента ради можно воспользоваться этой формулой
    X = sqrt[(R^2 + G^2 + B^2) / 3]               (**)

    где:
  • R,G,B — соотвествующие состовляющие.
  • X — типа интенсивность
    Применяя (**) для (*) получим:
    Y = {sqrt[(R^2 + G^2 + B^2) / 3] - Xmin}(Ymax - Ymin) / (Xmax - Xmin) + Ymin             (***)


    Чтобы получить новые значения R,G,B используем:
    d = Y / X;
    Rn = R * d;
    Gn = G * d;
    Bn = B * d;                             (****)

    где:
  • X — исходная интенсивность.
  • Y — полученная интенсивность
  • R,G,B — исходные значения RGB составляющих
  • Rn,Gn,Bn — полученные значения RGB составляющих
    При получении d в (****) следует учесть, что X — может быть равен 0.

    Вот в принципе и все.
    ... << RSDN@Home 1.1 beta 2 >>
  • Re[3]: в продолжение сказанному
    От: Sergey A. Sablin Россия http://www.elecard.com
    Дата: 04.11.03 05:30
    Оценка:
    Здравствуйте, uzzy, Вы писали:

    [skip]

    Еще советую посмотреть сампл Contrast в DirectShow, если конечно тебе не трудно его поставить, там приведен простецкий алгоритм изменения контраста, заодно посмотришь как это выглядит на кинах.

    Сергей.
    Сергей.
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.