簡體   English   中英

CImg庫中的get_convolve()函數正在使用哪個過濾器

[英]which filter is being use by get_convolve() function in CImg library

CImg庫的get_convolve()函數使用哪種過濾器(用C編寫)? 中位或高斯或雙邊或其他? 我試圖了解該功能,以便我可以在PIL openCV中使用類似的功能。 在庫的頭文件CImg.h中,它說:

/**
   Compute the convolution of the image by a mask.
   The result \p res of the convolution of an image \p img by a mask \p mask is defined to be :

   res(x,y,z) = sum_{i,j,k} img(x-i,y-j,z-k)*mask(i,j,k)

   param mask = the correlation kernel.
   param cond = the border condition type (0=zero, 1=dirichlet)
   param weighted_convol = enable local normalization.
**/

聲明是這樣的:

 template<typename t> CImg<typename cimg::superset2<T,t,float>::type>
  get_convolve(const CImg<t>& mask, const unsigned int cond=1, const bool weighted_convol=false) const {}

這是一個代碼片段:

                for (int z = mz1; z<mze; ++z) 
                for (int y = my1; y<mye; ++y) 
                for (int x = mx1; x<mxe; ++x) {// For each pixel
                  Ttfloat val = 0;
                  for (int zm = -mz1; zm<=mz2; ++zm) 
                  for (int ym = -my1; ym<=my2; ++ym) 
                      for (int xm = -mx1; xm<=mx2; ++xm)
                            val+=(*this)(x+xm,y+ym,z+zm,v)*mask(mx1+xm,my1+ym,mz1+zm);
                  dest(x,y,z,v) = (Ttfloat)val;
                }
                if (cond)
                  cimg_forYZV(*this,y,z,v)
                    for (int x = 0; x<dimx(); (y<my1 || y>=mye || z<mz1 || z>=mze)?++x:((x<mx1-1 || x>=mxe)?++x:(x=mxe))) {
                      Ttfloat val = 0;
                      for (int zm = -mz1; zm<=mz2; ++zm) for (int ym = -my1; ym<=my2; ++ym) for (int xm = -mx1; xm<=mx2; ++xm)
                        val+=at3(x+xm,y+ym,z+zm,v)*mask(mx1+xm,my1+ym,mz1+zm);
                      dest(x,y,z,v) = (Ttfloat)val;
                 }else
                    cimg_forYZV(*this,y,z,v)

我使用7 x 7的掩碼,其中的每個值都是'1'。 我從函數得到的是,對於每個像素,它圍繞着一個7乘7的窗口,像素位於中心,然后乘以身份矩陣。 感覺就像某種平滑過濾器,但它是哪一個? 我可以在openCV中使用哪種等效過濾器?

我可以發布整個功能,但它太長了,我沒有看到這一點。 我真的很感謝你的幫助。

所以,我在實施pHash的人的論文中找到了答案。 它說:在計算pHash的過程中,對圖像應用平均濾波器。 使用尺寸為7x7的內核。 要應用此內核,請使用CImg庫的get_convolve()函數。 然后突出顯示為:

對於圖像I和掩模M,它是:R(x,y,z)= SIGMA(i,j,k)I(x-i,y-j,z-k)M(i,j,k)

然后當我在這里查看 openCV提供的過濾功能類型時,它與盒式過濾器功能相匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM