Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Andrew Kadatch                       2:5020/400     07 Jun 2001  11:26:48
 To : All
 Subject : Re: размер M*N -> K*K
 -------------------------------------------------------------------------------- 
 
 >    YUV? что это черно-белое изображение?(нет наверно)
 
 y = 0.299*r + 0.587*g + 0.114*b
 u = -0.148*r - 0.291*g + 0.439*b;
 v =  0.439*r - 0.368*g - 0.071*b;
 
 Если хочется преобразовать цветное изображение в черно-белое, то
 Y-компонента
 как раз и есть яркость сигнала, т.е. как раз то, что надо (впрочем,
 коэффициенты Вам
 уже выдали :-).
 
 >    Можно уточнить? Интерполяция как делается?
 >    Берется каждая вторая точка(как по х так и по у) и ей присваивается
 
 среднее
 
 > значение цветов окружающих восьми точек?
 
 Да. Это называется билинейная интерполяция.
 
 Сегодня я пообщался с нашими экспертами в области обработки видео, и они мне
 сказали, что при большой разнице размеров изображения билинейная
 интерполяция
 не годится -- будут артефакты, наиболее заметные в видео. Hеобходимо
 предварительно
 примененить к исходному изображению anti-aliasing Gaussian blur filter
 длиной в 2-8 раза
 превышающей отношение размерностей изображения, т.е. для отношения 1:8 нужен
 фильтр
 в 15-65 тапов. Для того, чтобы края выглядели прилично, левый и правый край
 исходного
 изображения нужно зеркально отобразить (при горизонтальном масштрабировании;
 при
 вертикальном отображаются верх и низ). Если еще и хочется сохранить границы,
 то, если
 соседние точки сильно отличается, вместо результата фильтра берется одна из
 точек.
 Вот, н-р, коэффициенты гауссова блюр-фильтра длины 15 c
 сигма = 3.0 и суммой коэффициентов (gain) =128:
 Filter[15] = {1, 2, 4, 7, 10, 14, 17, 18, 17, 14, 10, 7, 4, 2, 1}.
 При использовании этого фильтра горизонтальное масштабирование выглядит
 след. образом:
 void BlurLine (short *Dst, short *Src, int Width)
 {
   int i;
   for (i = 0; i < Width; ++i)
   {
      int j, s;
      for (j = s = 0; j <= 15; ++j)
          s += Src[i + j - 8] * Filter[j];
      Dst[i] = s >> 7;
   }
 }
 
 Hу а уж потом билиненейная интерполяция...
 Так что писать правильный resizing меня научили, но с этого легче не
 становится -- геморрой тот еще.
 Удачи,
 АК
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: размер M*N -> K*K   Andrew Kadatch   07 Jun 2001 11:26:48 
Архивное /ru.algorithms/65779fdff524.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional