На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> Изменение цвета
    Как сделать цветное изображение чёрно-белым?
      изменить палитру.
        Не про ето, случайно?
          Дак там так не до чего и дошли!

          Что значит изменить палитру?
            Думаю, ему надо просто rgb->grayscale. Если точность не нужна - то просто (r+g+b)/3.
              r: byte = getRvalue(OldColor)
              g: byte = getGvalue(OldColor)
              b: byte = getBvalue(OldColor)
              C: byte = sqrt(r*r+g*g+b*b)
              NewColor: TColor = RGB(C, C, C)
                Я имею ввиду черно-белое (2 цвета). Наверное это называется монохромное.
                  Тогда тебе нужно узнать, что такое алгоритм floyd-steinberg, и dithering - это два наиболее подходящих метода для такого преобразования. Если тебе нужно преобразовывать контурные контрастные изображения (типа рисунок карандашом) - то можно и порогом (яркость ниже значения - 0, иначе 1).
                    http://ivr.webzone.ru/articles/bw/
                    http://www.visgraf.impa.br/Courses/ip00/proj/Dithering1/floyd_steinberg_dithering.html

                    вот тут почитай, тебе этой инфы 100\% хватит:)
                    Сообщение отредактировано: Shiru_Otaku -
                      Я прочитал английский алгоритм, но не понял ничего. Может кто разобрался, объяснит мне?
                        Если f/s для тебя сложен - сделай dithering. Это очень просто. Метод описан в статье по первому линку.
                          Попытался разобраться в английском алгоритме. У меня возникло несколько вопросов:

                          1) Если у меня пискел с яркорстью 90 (при палитре 0..255), то ошибка для него будет (90 div 127)*255-90 ( (x div 127) * 255 будет давать 0 если x<127 или 255, если x>=127 [пороговая  оценка]; (x div 127)*255-90), как написанно в алгоритме это ошибка) ???

                          2) Я беру левый верхний пиксел, считаю для него ошибку, потом к соседнему правому добавляю 7/16 ошибки, и т.д.:

                          X 7 ?
                          5 1 ?
                          ? ? ?

                          А что дальше, как обрабатывать пикселы указанные вопросом? Опять прибавлять ошибки от следующих пикселов по таблице?
                            Ой, я уже и не помню... Вот тебе кусок кода на С++, как я это делал:

                            for(aa=0;aa<192;aa++)
                            {
                            for(bb=0;bb<256;bb++)
                            {
                            if(brtab[aa][bb]>=128) { scrbw[aa][bb]=1; erro=255; } else { erro=0; scrbw[aa][bb]=0; }
                            erro=brtab[aa][bb]-erro;
                            brtab[aa][bb+1]+=(7*erro)>>4;
                            brtab[aa+1][bb-1]+=(3*erro)>>4;
                            brtab[aa+1][bb]+=(5*erro)>>4;
                            brtab[aa+1][bb+1]+=(erro>>4);
                            }
                            }

                            Размер изображения тут 192х256, в byte brtab[193][257] - яркости точек (на строку и столбец больше изображения, лишние ячейки - в 0). Условие заносит либо 1 либо 0 в матрицу получаемого монохромного растра.
                              Попробовал реализовать указанный алгоритм. Всё работает, но результат не очень.
                              Я реализовывал тот же самый алгоритм, только ошибка прибавлялась уже при обработке конкретного пиксела, а не заносилась в таблицу. В общем то тоже самое, но изображения получились очень разные. А нельзя ли всю программу (мне важно исходное изображение и результат после обработки)?
                                Всю программу дать не смогу (большая и без комментариев:). Тебе надо видеть, какое изображение из какого должно получиться? Могу кинуть картинки.

                                Чтобы результат получался приемлимым, нужно сделать ручную регулировку яркости и контраста.
                                  Всю программу дать не смогу (большая и без комментариев:). Тебе надо видеть, какое изображение из какого должно получиться? Могу кинуть картинки.

                                  Чтобы результат получался приемлимым, нужно сделать ручную регулировку яркости и контраста.
                                    Хорошо. Кинь картинки. denisppc@mail.ru.
                                      Лови мыло.
                                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                      0 пользователей:


                                      Рейтинг@Mail.ru
                                      [ Script execution time: 0,0399 ]   [ 15 queries used ]   [ Generated: 30.04.24, 13:41 GMT ]