Qt+opencv 画像線形フィルタリング ボックスフィルタリング、平均フィルタリング、ガウスフィルタリング

イメージボックスフィルタリング、平均値フィルタリング、ガウスフィルタリング

画像フィルタリングの概念

画像システム、伝送媒体、および記録機器の不完全性により、デジタル画像は、その形成、伝送、記録プロセス中にさまざまなノイズによって汚染されることがよくあります。
画像フィルタリング、つまり画像の細部の特徴を可能な限り保持しながら対象画像のノイズを抑えることは、画像の前処理において不可欠な操作であり、その処理効果の質はその後の画像の有効性と効果に直接影響します。処理と分析、信頼性。
線形フィルタリングには、ボックス フィルタリング、平均値フィルタリング、ガウス フィルタリングが含まれます。一般的に使用される線形フィルタには次のものがあります。

1.低通滤波器:允许低频率通过
2.高通滤波器:允许高频率通过
3.带通滤波器:允许一定范围频率通过
4.带阻滤波器:阻止一定范围频率通过并允许其他频率通过
5.全通滤波器:允许所有频率通过,仅改变相位
6.陷波滤波器:阻止一个狭窄频率范围通过

画像のぼかしの概念: 一般に、ローパスはぼかしを意味し、ハイパスは鮮明化を意味します。
ドメイン オペレーター (ローカル オペレーター) は、特定のピクセルの周囲のピクセル値を使用して、このピクセルの最終的な出力値を決定するオペレーターです。線形ドメイン フィルタリングは、一般的に使用されるドメイン演算子です。ピクセルの出力値は、入力ピクセルの加重合計に依存します。
ここに画像の説明を挿入します
h(k, l) はカーネルと呼ばれ、フィルターの重み付け係数です。

平均フィルター

void Blur( InputArray src, OutputArray dst,
Size ksize, Pointアンカー = Point(-1,-1),
int borderType = BORDER_DEFAULT );
パラメーターの説明:
src 入力画像
dst 出力画像
ksize カーネル サイズ
アンカー アンカー ポイント (平滑化ポイント);デフォルトの Point(-1,-1) は、カーネルの中心点をアンカー ポイントとして取ることを意味します。
borderType: 画像の外側の境界パターンを推測するために使用されます。

平均値フィルターによって出力される各ピクセルは、カーネル ウィンドウの入力ピクセルの平均 (すべてのピクセルの重み付け係数が等しい) であり、正規化されたボックス フィルターと同等です。また、平均値フィルタ自体にも欠点があり、画像の細部をしっかり保護することができず、画像のノイズを除去する一方で、画像の細部も破壊してしまうため、画像がぼやけてしまい、ノイズ点をうまく除去できません。

カーネルは次のとおりです:
ここに画像の説明を挿入します
テスト効果:
ここに画像の説明を挿入します

ボックスフィルター

void boxFilter(InputArray src, OutputArray dst, int d Depth,
サイズ ksize, ポイントアンカー = Point(-1,-1),
bool Normalize = true,
int borderType = BORDER_DEFAULT );

パラメータの説明:
src 入力画像
dst 出力画像 d
Depth 出力画像深度
ksize カーネル サイズ
アンカー アンカー ポイント (平滑化ポイント); デフォルトの Point (-1,-1) は、カーネルの中心点をアンカー ポイントとして取得することを意味します。
正規化: デフォルトは true です。
borderType: 画像の外側の境界パターンを推測するために使用されます。

ボックス フィルタリングに使用されるカーネルは次のとおりです。normalize
ここに画像の説明を挿入します
が true の場合、ボックス フィルタリングは正規化され、その効果は平均フィルタリングと同じになります。
Normalize が false の場合、各ピクセル領域の積分特性を計算するために使用されます。
上記のコード:

void PhotoBlur::cvHomogeneousBlur(int k_size)
{
    
    
    Mat srcImage = imread("F:/work/opencv/photoblur/add.jpg");
    /* void blur( InputArray src, OutputArray dst,
                        Size ksize, Point anchor = Point(-1,-1),
                        int borderType = BORDER_DEFAULT );
    */
    Mat dstImage = srcImage.clone();
    boxFilter(srcImage,dstImage,-1,Size(k_size,k_size),Point(-1,-1),true);
    bgrMat2Image(dstImage);
}

Normalize が true の場合、ボックス フィルター正規化の効果:
ここに画像の説明を挿入します
Normalize が false の場合、つまり: boxFilter(srcImage,dstImage,-1,Size(k_size,k_size),Point(-1,-1),false) ;
効果以下のとおりであります:

ここに画像の説明を挿入します

ガウスフィルター

void GaussianBlur( InputArray src, OutputArray dst, Size ksize,
double sigmaX, double sigmaY = 0,
int borderType = BORDER_DEFAULT );
パラメータの説明:
src 入力画像
dst 出力画像
ksize カーネル サイズ。これは、次の基本
sigmaX ガウス カーネル関数である必要があります。 X 方向の偏差
sigmaY は、ガウス カーネル関数の Y 方向の偏差で、0 の場合は sigmaX に設定されます。sigmaX と sigmaY が両方とも 0 の場合、ksize.width と ksize.height から計算されます
borderType: 画像の外側の特定の境界線パターンを推測するために使用されます

ガウス フィルタリングはおそらく最も便利なフィルタです (最速ではありませんが)。ガウス フィルター処理は、入力配列内の各点をガウス カーネルで畳み込み、それらを加算して出力配列を生成することによって行われます。ガウス フィルタリングは画像全体の加重平均処理であり、各ピクセルのポイント値は、フィールド内の他のピクセル値とそれ自体の加重平均によって取得されます。

1次元のゼロ平均ガウス関数:

G(x)=exp(-x 2 /2sigma 2 )、シグマはガウス関数の高さを決定します。

2 次元ガウス関数:
ここに画像の説明を挿入します
テスト効果:
ここに画像の説明を挿入します

著者: Feima Programmer
技術交流へようこそ: QQ: 255895056
転載の際は出典を明記し、不適切な点があれば修正してください

おすすめ

転載: blog.csdn.net/haohaohaihuai/article/details/106279456