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 x 7のウィンドウを取り、アイデンティティマトリックスを掛けることです。平滑化フィルターのような気がしますが、どれでしょうか?openCVで使用できる同等のフィルターはどれですか?
関数全体を投稿できますが、長すぎて要点がわかりません。あなたの助けに本当に感謝します。