unmixと条件付き平均:排除エイリアシングと条件付き平均

 

unmix

 手順は排除するために使用される「画素エイリアシング」を いわゆるエイリアシング画素、一部の画素が直ちにエッジラインを横切るので、画素上に結像自然シーン画像、CMOSエッジラインの値です。

このような特徴は、Rが、G、Bの三色の画素勾配値が矛盾している画素です。例えば、CMOSは、各ピクセルの色は、その配列順序左から右にソートされるR、G、B三色センサを有します。

だから、傾斜したエッジ画素位置G、及び次いで三色の勾配値は異なる稜線部、オブジェクトの下部の背景、博士> dBでのちょうど一行、そうでない場合はデシベル> DRが存在する場合.. このような

ピクセルは、我々はunmixによってそれを排除することができます。この方法は、それが、画素勾配画素置換の、同一又は類似の画素近傍であり、非常にシンプルです。ここで、コードは次のとおりです。

Unmixマット(CONSTマット&IMG、neibourSizeをINT)
{ 
    MAT imgCopy img.clone =(); 
    INT = NR neibourSize / 2; 
    INT COLS = img.cols、行= img.rows; 
    MAT kernel_x =(Mat_ <整数>(1、。 2)<< - 1,1); 
    マットkernel_y =(Mat_ <整数>(2,1)<< - 1,1)、
    マットimg_dx、img_dy; //事前宣言勾配行列X、Y方向
    filter2D(IMG 、img_dx、CV_32F、kernel_x); 
    filter2D(IMG、img_dy、CV_32F、kernel_y); 

    マット勾配= ABS(img_dx)+ ABS(img_dy); 

    マットシータ= getGradientDirect(img_dy、img_dx); //この関数は、参照します。https: //www.cnblogs.com/phoenixdsg/p/11352623.html 

    マットthetaGray; 
    cvtColor(シータ、thetaGray、COLOR_RGB2GRAY); //容易にするために、グレースケール画像の処理に変換

    /// unmix()関数を
    (iは= NR int型のために、私は、-NR行を<; Iは++します)
    {
        用(INT J = NR; J <COLS-NR; J ++)
        { 
            フロート* PG = CV_MAT_ELEM2(勾配、フロート、I、J); 
            フロートR&LT = PG [2]、Gは、Pgは、BはPGを[= = [1] 2]; 
            IF(!! R&LT B = G = R&LT || || B = G!)
            { 
                マットthetaGray TMP =(のRect(J-NR、NR-I、neibourSize、neibourSize)); 
                マットTMPR = tmp.clone (); //隣接画素採取
                フロートPijを= *(CV_MAT_ELEM2(thetaGray 、フロート、I、J)); // 現在の画素値取得
                TMPR = ABSを(TMPR-Pijにある); 
                tmpr.at <a float>(NR、 NR)= 7; 

                ダブルMINV、
                ポイントMINLOC; 
                minMaxLoc(TMPR、&MINV、0、&MINLOC); 
                MINLOC =ポイント(NR、NR)-minLoc。 
// << COUT "MINV =" << << MINV ";" 
// <<" MINLOC =" << MINLOC <<てendl; 
                int型II = minLoc.y + I、JJ = minLoc.x + J; 
                用(int型のk = 0; K <3; kは++)
                { 
                    imgCopy.ptr <Vec3b>(I)[J] [K] = 
                            img.ptr <Vec3b>(II)[JJ] [K]。
                } 
            } 
        } 
    } 
    戻りimgCopy。
}

  この関数は2つのパラメータを取り、最初の画像が処理される、第二のパラメータは近傍サイズであり、大きさが3,5,7のような奇数でなければなりません。、unmixの結果である関数の戻り値は、。

条件付き平均

現在のピクセルNセット0隣接する画素の組が有効画素S、{ニッケル}から選択される、Sです。平均有効画素N取得0」、及び代替N 0

{式中、n = S I:| N I = N 0 | <T}。Nは有効画素数です。それは常にS N含まれています0をプログラムは次のような効果を持つことになります。

1)均質な領域において、ノイズの少ない平滑化、ノイズの相対値がT未満です。

2)境界領域の近傍に、コントラストが処理なし境界の画素が平均だけを横切って、Tよりも大きいです。そう画像を平滑化、境界画素の側面のみを処理のために意味します。

    これでも普通の平均ファジー境界もぼやけてきた、通常のファジー平均値と異なっています。

3)それは、勾配範囲を平滑化するノイズだけではなく、勾配を滑らかにしません。

T未満のテクセル()との間の小さな差がある場合4)テクスチャ領域において、その後のピクセル、すなわちテクスチャを除去するために、通知領域として平滑であろう。

     Tより大きいテクセル差場合、プロセスは、滑らかではありません。

 

 

コードは以下の通りであります:

conditionalAerage(マット&IMG、INT T)無効
{ 
    行INT = img.rows、COLS = img.colsと、
    int型neighborSize = 3; 
    int型NR = neighborSize / 2; 
    (; iが行-NRを<I ++は、I = NR INT)のために
    { 
        ため(INT J = NR; J <COLS-NR; J ++)
        { 
            int型CTN = 0。
            ベクトル<Vec3b> NV; 
            Vec3b P0 = img.at <Vec3b>(i、j)は、
            フロートP0m =フロート(P0 [0] + P0 [1] + P0 [1])/ 3; 
            (; <neighborSizeで; = I-NRのint ++で)のために
            { 
                ため(INT JN = I-NR; JN <neighborSize; JN ++)
                { 
                    Vec3b Pnの= img.at <Vec3b>(JN、IN)。
                    Pnmを=フロートフロート(PN [0] + Pnを[1] + Pnの[1])/ 3;
                    (ABS(Pnmを-P0m)<T)であれば
                    { 
                        nv.push_back(PN)。
                    } 
                } 
                Vec3b和(0,0,0)。
                CTN = nv.size()。
                用(int型V = 0; V <CTN; V ++)
                { 
                    合計+ = NV [V]。
                } 
                Vec3b AVER =和/ CTN。
                (あり、k <img.channels(); int型のk = 0 ++ k)に対する
                    img.at <Vec3b>(i、j)は[K] = [K]を断言。
            } 

        } 
    } 
}

  

 

おすすめ

転載: www.cnblogs.com/phoenixdsg/p/11359122.html