2017-10-18 11 views
1

J'essaie de répliquer une séquence de filtres sur mon image, pour cela j'ai besoin de créer un noyau, qui contient le noyau Filter2D et le noyau gaussien. normalement, nous appliquons un gaussianBlur puis un filter2D. Les commandes les plus courantes pour c'est:Comment faire un noyau 2D personnalisé sur Filter2D en utilisant le noyau gaussien 1D

kernel2D= Mat::ones(kernelSize, kernelSize, CV_32F) *(1/(float)(kernelSize*kernelSize)), Point(-1, -1); 
GaussianBlur(src, resultO, Size(kernelSize, kernelSize), sigma); 
filter2D(resultO, resultO, resultO.depth(), kernel2D, Point(-1, -1),0,BORDER_DEFAULT); 

Alors, d'abord créer un noyau gaussienne, en utilisant la méthode getGaussianKernel, et le noyau 1D en utilisant Mat :: Ones. J'essaie de multiplier ces deux noyaux pour obtenir le même résultat, comme le code ci-dessus.

sigma = 0; 
    Mat mKernelGauss1 = getGaussianKernel(kernelSize, sigma, CV_32F); 
    mKernel2D = Mat::ones(1, kernelSize, CV_32F) *(1/(float)(1*kernelSize)), Point(-1, -1); 
    mResultKernel = mKernelGauss1 * mKernel2D; 

Quand je fais ce processus, je reçois un KernelSize x KernelSize noyau comme résultat, donc je peux appliquer ce noyau (mResultKernel) à mon image, comme ceci:

filter2D(src, resultO, src.depth(), mResultKernel, Point(-1, -1), 0, BORDER_DEFAULT); 

Mon problème est ce noyau que je crée ne me donne pas le même résultat que faire gaussianBlur et filter2D séquentiellement. J'ai vraiment besoin de suivre cette méthode, convolutionner mon image et appliquer la fonction filter2D en utilisant un seul noyau 2D, comme je l'ai montré plus haut.

Répondre

0

Vous avez confondu la multiplication et la convolution. Vous pouvez utiliser un filtre h(x) alter pour deux filtre de séquence f(x) et g(x) par cette fomulaire: h(x) = f(x) * g(x) qui est * opérateur de convolution. Pour la convolution matricielle, vous pouvez vous référer à this lecture.

+0

Merci aux références, mais je suis déjà en train de convolutionner l'image en utilisant filter2D, j'ai seulement besoin de générer le noyau. Et c'est mon problème. –