При захвате с видеокамеры с помощью SampleGrabber в результирующих картинках наблюдается гребенка (интерлэсинг). Хотелось бы избавиться от нее без использования деинтерлэсинговых фильтров, потому как приложение риал-тайм, а деинтерлэсинг занимает слишком много времени.
Для меня достаточным решением было бы копирование строки в следующую. Я знаю что VMR позволяет задавать подобное поведение, но боюсь что его настройки не повлияют на работу SampleGraber.
Возможны ли еще какие-нибудь решения данной задачи в DirectShow? Не хотелось бы это делать вручную.
Уменьшение картинки вдвое, не самый лучший вариант, потому как потеряется горизонтальное разрешение чего не хотелось бы.
Здравствуйте, amauter, Вы писали:
A>Помогите разобраться с следующей проблемой.
A>При захвате с видеокамеры с помощью SampleGrabber в результирующих картинках наблюдается гребенка (интерлэсинг). Хотелось бы избавиться от нее без использования деинтерлэсинговых фильтров, потому как приложение риал-тайм, а деинтерлэсинг занимает слишком много времени.
A>Для меня достаточным решением было бы копирование строки в следующую. Я знаю что VMR позволяет задавать подобное поведение, но боюсь что его настройки не повлияют на работу SampleGraber.
A>Возможны ли еще какие-нибудь решения данной задачи в DirectShow? Не хотелось бы это делать вручную.
A>Уменьшение картинки вдвое, не самый лучший вариант, потому как потеряется горизонтальное разрешение чего не хотелось бы.
Простые методы деинтерлейсинга — дублирование строк и простая интерполяция, занимают мало времени.
Дублирование строк соизмеримо по времени с копированием. Простая интерполяция делается тоже очень быстро, достаточно для реал-тайма, но результат лучше чем при дублировании.
Здравствуйте, xp_alp, Вы писали:
_>Простые методы деинтерлейсинга — дублирование строк и простая интерполяция, занимают мало времени. _>Дублирование строк соизмеримо по времени с копированием. Простая интерполяция делается тоже очень быстро, достаточно для реал-тайма, но результат лучше чем при дублировании.
Это понятно. Мне бы хотелось сделать что эти вещи сделал DirectShow, если это не возможно то я сделаю это сам вручную. DirectShow хотелось бы использовать потому, что он скорее всего может использовать аппаратные возможности деинтерлэсинга.
Здравствуйте, amauter, Вы писали:
A>Здравствуйте, xp_alp, Вы писали:
_>>Простые методы деинтерлейсинга — дублирование строк и простая интерполяция, занимают мало времени. _>>Дублирование строк соизмеримо по времени с копированием. Простая интерполяция делается тоже очень быстро, достаточно для реал-тайма, но результат лучше чем при дублировании.
A>Это понятно. Мне бы хотелось сделать что эти вещи сделал DirectShow, если это не возможно то я сделаю это сам вручную. DirectShow хотелось бы использовать потому, что он скорее всего может использовать аппаратные возможности деинтерлэсинга.
Если тебе нужно сграбить картинку, причем тут аппаратный деинтерлейсинг? Или ты хочешь потом картинку из видеокарты вытащить? Слабо представляю, как это можно сделать. По-моему прийдется ручками. Сделай InPlace фильтр, который когда нужно деинтерлейсит картинку и записывает на диск. В остальное время он не будет тратить процессорное время.
amauter wrote: > > Здравствуйте, xp_alp, Вы писали: > > _>Простые методы деинтерлейсинга — дублирование строк и простая > интерполяция, занимают мало времени. > _>Дублирование строк соизмеримо по времени с копированием. Простая > интерполяция делается тоже очень быстро, достаточно для реал-тайма, но > результат лучше чем при дублировании. > > Это понятно. Мне бы хотелось сделать что эти вещи сделал DirectShow, > если это не возможно то я сделаю это сам вручную. DirectShow хотелось бы > использовать потому, что он скорее всего может использовать аппаратные > возможности деинтерлэсинга.
Позвольте поитерисоваться — где это вы нашлы пианиста тыкающего 'Grab' с
частотой 100 fps? Нет такого? А с какой частотой происходит 'Grab'?
0.00001 fps? Ну тогда наверное и доля деинтерлейса, даже на базе очень
сложных алгоритмов, исчезающе мала, нет?. Даже если у вас 'Grab'
'тыкает' другая софтина — дублирование строк или простая интерполяция
будет дешевле чем использование акселератора. Вот вам совет — избавьтесь
от желания прикрутить еще одну модную технологию к вашей софтине — и
багов будет меньше и геморой не будет досаждать.
Здравствуйте, amauter, Вы писали:
A>Помогите разобраться с следующей проблемой.
A>При захвате с видеокамеры с помощью SampleGrabber в результирующих картинках наблюдается гребенка (интерлэсинг). Хотелось бы избавиться от нее без использования деинтерлэсинговых фильтров, потому как приложение риал-тайм, а деинтерлэсинг занимает слишком много времени.
A>Для меня достаточным решением было бы копирование строки в следующую. Я знаю что VMR позволяет задавать подобное поведение, но боюсь что его настройки не повлияют на работу SampleGraber.
A>Возможны ли еще какие-нибудь решения данной задачи в DirectShow? Не хотелось бы это делать вручную.
A>Уменьшение картинки вдвое, не самый лучший вариант, потому как потеряется горизонтальное разрешение чего не хотелось бы.
Если тебе просто нужно показывать, то советую разделять кадры на два полуполя и показывать их удвоенной частотой.
Эффект получается офмгенный, как на телеке. Видео выводится без гребенки и плавность , за счет чего становится гораздо приятней смотреть.
_>Если тебе нужно сграбить картинку, причем тут аппаратный деинтерлейсинг? Или ты хочешь потом картинку из видеокарты вытащить? Слабо представляю, как это можно сделать. По-моему прийдется ручками. Сделай InPlace фильтр, который когда нужно деинтерлейсит картинку и записывает на диск. В остальное время он не будет тратить процессорное время.
Где-то слышал, что аппаратный деинтерлэсинг бывает в карточках кэпчуринга. Вот его и хотелось использовать.
Еще есть одна проблемка с ручной обработкой. На сколько я знаю, что при разрешении не равном максимальному и половинному, дублируются произвольные строки в захваченном кадре, а не каждая. Соответсвенно обработать их становиться затруднительно.
Здравствуйте, j.smith, Вы писали:
JS>Позвольте поитерисоваться — где это вы нашлы пианиста тыкающего 'Grab' с JS>частотой 100 fps? Нет такого? А с какой частотой происходит 'Grab'? JS>0.00001 fps? Ну тогда наверное и доля деинтерлейса, даже на базе очень JS>сложных алгоритмов, исчезающе мала, нет?. Даже если у вас 'Grab' JS>'тыкает' другая софтина — дублирование строк или простая интерполяция JS>будет дешевле чем использование акселератора. Вот вам совет — избавьтесь JS>от желания прикрутить еще одну модную технологию к вашей софтине — и JS>багов будет меньше и геморой не будет досаждать.
Я создаю программку компьютерного зрения в реальном времени, поэтому хотелось бы максимально минимизировать загрузку процессора, и что бы все что можно по максимуму использовало аппаратное ускорение.
amauter wrote: > > Я создаю программку компьютерного зрения в реальном времени, поэтому > хотелось бы максимально минимизировать загрузку процессора, и что бы все > что можно по максимуму использовало аппаратное ускорение.
Повторяю еще раз и медленно:
"Даже если у вас 'Grab' 'тыкает' другая софтина — дублирование строк или
простая интерполяция будет дешевле чем использование акселератора."
В особенности это относится к 'программкам'.
Для того чтобы убедить меня в обратном вам всего лишь надо найти
интерфейс акселератора, научится быстро копировать туда-и-обратно (DMA?
На стандартном железе??!!). Как способ избежать копирования — научить
акселератор работать с внешними буферами или научить устройство захвата
работать с буферами акселератора. Потом надо будет отучить их от
конкуренции за доступ к одному и тому-же ресурсу а то контроллер памяти
устанет. Ну и последнее — акселератор должен быть хотя бы на каждом
10-ом PC. В результате на каждом 10-ом PC будем иметь ускоренние гораздо
меньше 1% (есть мнение что анализ картинки задача на несколько порядков
сложнее чем дублирование строк).
А с другой стороны дублирование поля займет 75% от времени копирование
двух полей в железку и назад. Простая интерполяция думаю соизмерима с
временем копирование двух полей.
В общем перефразируя падонков — архитектор выпей йаду.
Здравствуйте, j.smith, Вы писали:
JS>amauter wrote: >> >> Я создаю программку компьютерного зрения в реальном времени, поэтому >> хотелось бы максимально минимизировать загрузку процессора, и что бы все >> что можно по максимуму использовало аппаратное ускорение.
JS>Повторяю еще раз и медленно:
JS>"Даже если у вас 'Grab' 'тыкает' другая софтина — дублирование строк или JS>простая интерполяция будет дешевле чем использование акселератора."
JS>В особенности это относится к 'программкам'.
JS>Для того чтобы убедить меня в обратном вам всего лишь надо найти JS>интерфейс акселератора, научится быстро копировать туда-и-обратно (DMA? JS>На стандартном железе??!!). Как способ избежать копирования — научить JS>акселератор работать с внешними буферами или научить устройство захвата JS>работать с буферами акселератора. Потом надо будет отучить их от JS>конкуренции за доступ к одному и тому-же ресурсу а то контроллер памяти JS>устанет. Ну и последнее — акселератор должен быть хотя бы на каждом JS>10-ом PC. В результате на каждом 10-ом PC будем иметь ускоренние гораздо JS>меньше 1% (есть мнение что анализ картинки задача на несколько порядков JS>сложнее чем дублирование строк).
JS>А с другой стороны дублирование поля займет 75% от времени копирование JS>двух полей в железку и назад. Простая интерполяция думаю соизмерима с JS>временем копирование двух полей.
JS>В общем перефразируя падонков — архитектор выпей йаду.
Может я в самом начале неясно выразился, потому как еще совсем мало знаю DirectShow. Меня интересуют только стандартные средства, если их нет, переживем. Ничего изобретать я не собирался.
A>Я создаю программку компьютерного зрения в реальном времени, поэтому хотелось бы максимально минимизировать загрузку процессора, и что бы все что можно по максимуму использовало аппаратное ускорение.
??? А зачем деинтерлейсить входные данные? Деинтерлейсингом вы их грубо искажаете, и притом fps уменьшается в два раза — смысл?
Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>Если тебе просто нужно показывать, то советую разделять кадры на два полуполя и показывать их удвоенной частотой. ATP>Эффект получается офмгенный, как на телеке. Видео выводится без гребенки и плавность , за счет чего становится гораздо приятней смотреть.
Интересное решение. А можно чуть подробней о его реализации? Как я понимаю здесь есть некоторые проблемы: допустим полукадры идут с частотой 50гц (стандарт pal) а у монитора 70, 80, 90. И как выводить эти полукадры, с какой частотой? Можно, конечно, сменить частоту монитора, но это не всегда доступно.
Здравствуйте, mike777, Вы писали:
M>Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>>Если тебе просто нужно показывать, то советую разделять кадры на два полуполя и показывать их удвоенной частотой. ATP>>Эффект получается офмгенный, как на телеке. Видео выводится без гребенки и плавность , за счет чего становится гораздо приятней смотреть.
M>Интересное решение. А можно чуть подробней о его реализации? Как я понимаю здесь есть некоторые проблемы: допустим полукадры идут с частотой 50гц (стандарт pal) а у монитора 70, 80, 90. И как выводить эти полукадры, с какой частотой? Можно, конечно, сменить частоту монитора, но это не всегда доступно.
В случае в оспроизведения в окне воспроизводите также как и при 25 кадрах, это же ведь тоже не кратно 70, 80 и 90 герцам. В случае воспроизведения в полноэкранном режиме, можете попробовать синхронизоваться частотой монитора. Вообще насколько я помню, стандартный Renderer не синхронизуется с частотой развертки. Поэтому не думайте об этом, просто выводите и все — это будет ровно в 2 раза плавней чем при 25 герцах.
Делаете TransformFilter, принимаете кадр, разделяете его на два полуполя, растягиваете каждое в два раз по вертикали (интерполяция в данном случае делается тривиально), и выдаете два семпла с удвоенной частотой (заменяете времена семплов rtStart и rtStop).
Здравствуйте, mike777, Вы писали:
A>>Я создаю программку компьютерного зрения в реальном времени, поэтому хотелось бы максимально минимизировать загрузку процессора, и что бы все что можно по максимуму использовало аппаратное ускорение.
M>??? А зачем деинтерлейсить входные данные? Деинтерлейсингом вы их грубо искажаете, и притом fps уменьшается в два раза — смысл?
Алгоритмы распознавания с гребенкой не работают. Предложите другое решение.
Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>Делаете TransformFilter, принимаете кадр, разделяете его на два полуполя, растягиваете каждое в два раз по вертикали (интерполяция в данном случае делается тривиально), и выдаете два семпла с удвоенной частотой (заменяете времена семплов rtStart и rtStop).
Ух-ты! А можно взглянуть на что-нить готовое, использующее такой подход, с целью заценить итоговое качество картинки?
DScaler, кстати, так поступает? (если я конечно верно понял суть эффекта)
Здравствуйте, Ulin, Вы писали:
U>Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>>Делаете TransformFilter, принимаете кадр, разделяете его на два полуполя, растягиваете каждое в два раз по вертикали (интерполяция в данном случае делается тривиально), и выдаете два семпла с удвоенной частотой (заменяете времена семплов rtStart и rtStop).
U>Ух-ты! А можно взглянуть на что-нить готовое, использующее такой подход, с целью заценить итоговое качество картинки? U>DScaler, кстати, так поступает? (если я конечно верно понял суть эффекта)
Например Elecart Moonlight Player — помоему так. Он так делает. Реализация несложна но эффект потрясающий, как будто по TV-Tunerу смотришь.
Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>Например Elecart Moonlight Player — помоему так. Он так делает. Реализация несложна но эффект потрясающий, как будто по TV-Tunerу смотришь.
Если выглядит, как в DScaler, то это действительно смотрится весьма и весьма. Насколько я понял, этот прием фактически заменяет Deinterlace filter? Тогда особенно интересно взглянуть на качество именно деинтерлейсинга...
Здравствуйте, Ulin, Вы писали:
U>Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>>Например Elecart Moonlight Player — помоему так. Он так делает. Реализация несложна но эффект потрясающий, как будто по TV-Tunerу смотришь.
U>Если выглядит, как в DScaler, то это действительно смотрится весьма и весьма. Насколько я понял, этот прием фактически заменяет Deinterlace filter? Тогда особенно интересно взглянуть на качество именно деинтерлейсинга...
Да заменяет, и даже более правильно делает, получается то, для чего интерлейсинг собственно и задумывался — получить более плавную картинку, сохранив при этом тоже частотный диапазон. Мне вооще не понятно, зачем деинтерлейсинг при проигрывании....
U>Плейер такой гугль не нашел
Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>Да заменяет, и даже более правильно делает, получается то, для чего интерлейсинг собственно и задумывался — получить более плавную картинку, сохранив при этом тоже частотный диапазон. Мне вооще не понятно, зачем деинтерлейсинг при проигрывании....
Насколько я понимаю, используя под WinXP VMR video renderer я получаю при проигрывании как раз такой эффект (по крайней мере картинка с камеры показывается плавная и приятная, и в принципе не уступает картинке DScaler). Однако интерлейсинг при этом никуда не исчезает, и все равно приходится использовать фильтр...
Здравствуйте, Ulin, Вы писали:
U>Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>>Да заменяет, и даже более правильно делает, получается то, для чего интерлейсинг собственно и задумывался — получить более плавную картинку, сохранив при этом тоже частотный диапазон. Мне вооще не понятно, зачем деинтерлейсинг при проигрывании....
U>Насколько я понимаю, используя под WinXP VMR video renderer я получаю при проигрывании как раз такой эффект (по крайней мере картинка с камеры показывается плавная и приятная, и в принципе не уступает картинке DScaler). Однако интерлейсинг при этом никуда не исчезает, и все равно приходится использовать фильтр...
Нет, ни одно мне известное стандартное стредство так не делает. Он делает похоже, тоже 50 кадров в секунду, но не интерполирует, не растягивает полуполя а просто показывает их как есть, а нужно сначала показывать одно — вместо тругого интерполяция, потом другое.