OpenCV GPU convolve функция и липсващата граница

Имам въпрос относно функцията Convolve в OpenCV с помощта на GPU ускорение. Скоростта на навивките е приблизително 3,5 по-бърза при използване на GPU

когато работи:

convolve(src_32F, kernel, cresult, false, cbuffer);

Въпреки това границите на изображението липсват (в резултат на това)

В противен случай резултатът е отличен (размерът на ядрото е 60x60)

Благодаря


person jeffrico el exotico    schedule 18.12.2011    source източник


Отговори (1)


Това е начинът, по който работи конволюцията.

Той изчислява стойността на всеки пиксел като среднопретеглена стойност на околните. Така че, ако вземете предвид 30 пиксела от всяка страна, за всички пиксели, които са по-близо до границата на изображението от 30 пиксела, намотката не е дефинирана.

При реализацията на функциите за филтриране на процесора тези липсващи пиксели се допълват с фалшиви стойности въз основа на дадена стратегия (копиране, огледало, празно и т.н.).

Това, което можете да направите, е ръчно да напълните матрицата си с желаните стойности в по-голяма матрица, да филтрирате голямата и след това да я изрежете обратно. За това можете да използвате функцията gpu::copyMakeBorder().

person Sam    schedule 19.12.2011
comment
Здравейте; Има ли някакъв метод за факта, че стойностите са леко превишени. ръчното добавяне не е опция за мен. Например, когато работя с изображение 320-240, добавям 30 към всеки размер и резултатът е 321-241 (ръчно съм извадил едно отгоре и отдясно. Това, което имам предвид с метода, е, например, ако страната на kerel е четна, тогава коригирайте, ако странната не е (или нещо подобно) - person jeffrico el exotico; 19.12.2011
comment
Размерът на ядрото трябва да е нечетен. защото се прилага симетрично отляво и отдясно: n стойности отляво, n отдясно + център. Така че размерът на ядрото трябва да бъде (2n+1). Ако изпратите равномерно ядро ​​(60/60), може просто да добавите една колона и един ред в ядрото и да направите същото и за изображението. - person Sam; 19.12.2011
comment
Но позволете ми да ви дам един приятелски съвет: преди да започнете да работите върху неща като CUDA оптимизации и сложни задачи за обработка на изображения, моля, прочетете, разберете и приложете основите. Защото няма да можете да продължите напред по този път. Така че, потърсете в Google wiki convolution и го прочетете наистина, наистина внимателно. - person Sam; 19.12.2011
comment
:) Благодаря за съвета. Съгласен съм с това, което казвате, и това би било нормалният начин. Моята задача не е наистина да разбирам работата, а не да комбинирам различни OO компоненти и да ги слея, за да отговарят на съществуващ дизайн. Но не ме продавайте, нещата вървят добре, въпреки моето невежество :) Във всеки случай, Василе, много ти благодаря - person jeffrico el exotico; 19.12.2011
comment
BTW: Току-що проверих и ръководството за OpenCV convolve изрично посочва, че изходът е със същия размер като оригинала, или може би бъркам компонента - person jeffrico el exotico; 19.12.2011
comment
Добре, радвам се, че работи :) И OpenCV документът не винаги е перфектен. - person Sam; 19.12.2011