幸いな飛行船戦闘個々+グループ[6139371]精密着陸、血液の安心復帰

幸いな飛行船戦闘個々+グループ[6139371]精密着陸、血液の安心復帰

Q技術的な専門家グループ6139371オンラインマニュアル終日1人の指導!共有する経験と知識の年!勝利チームはあなたに実用的な計画を教えて!

メディアンフィルタ(メディアンフィルタ)は非線形フィルタリング技術であり、基本的な考え方は、単一チャネルの近傍の画素の階調値をソートすることで、中間値は、元の画素のグレー値を置き換えます。メディアンフィルタは、現在のフィルタリング塩とコショウノイズを処理するための最良の方法です。
また、送信時インパルスノイズ、またはリモートセンサとして知られているコショウノイズ(ごま塩ノイズ)は、元のデータは、画像が粒状に見える散乱ノイズ点の多くを引き起こし、影響を受けることになります。画像では、低周波数および中間周波数に集中エネルギーので、中間値のデータのほとんどはほとんど高周波汚染ポイントを取得するためにとられない近傍をソート。

まず、いくつかの基本的な考え方
(1)線形フィルタリングおよび非線形フィルタリングとは何ですか?

線形フィルタリング:
2つ以上の信号およびそれらのそれぞれの応答及び応答に等しい合計を指します。そうすぎるアカデミック、および画像の各画素の出力値は、単に、入力ピクセルとの重み付けされた数に等しいです。

非線形フィルタリング:
非線形動作ゼロと同様、絶対値の計算に含まれます。
。1
2
。3
。4
。5
。6
(2)隣接画素点
名前が示すように、画素は、画素に隣接する近傍画素の数を指します。


第二に、メディアンフィルタの原理は
、それがエッジ領域でない場合は、画像データはあまり差がない、優しいです。したがって、ノイズポイントの値が大きすぎるか小さすぎるのいずれかです。次のような図画像は、領域250、すなわちフィルタが完了し、原点はノイズである、150の中間値が補充、* 3 3ソートデータが9を通って突出する、未処理のままにされますこれは、回収ゾーンを平らに削除されます。同様に、エッジ領域では、境界は、高周波数に影響を与えず、3×3の全領域が、汚染されていない限り低い値は、選択値が影響されない、突出れます私たちは、に対処するための大きなコアを検討することができます。


第三に、メディアンフィルタ処理を実施し
、プログラムの影響で、最初のを見て:

(1)主な機能:画像読取 - メディアンフィルタ - ディスプレイ

メインINT(ボイド)
{
SRC読み取り// [1]画像
CV = CVは:: ::マットは、Src( "pic3.jpg")をIMREAD;
// [2] DST対象ピクチャ
CV ::マットDST;
// [ 3]メディアンフィルタRGB(5×5)核のサイズ
dealMedianRGB(SRC、DST ,. 5 ,. 5);
// [4]形態が示されている。
CVを::関数imshow( "SRC"、SRC);
CV ::関数imshow( "DST"、DST);
CV :: waitKey(0);
CV :: destroyAllWindows();
0を返す;
}
。1
2
3
4
5
6
7
8
9
10
11
12は、
13である
14
15
(2)カラー画像チャネル分離
にチャネル上の画素点の値のメジアンフィルタリング動作は、従って、カラー画像をRチャンネル、Gチャンネル、Bチャンネルのメディアンフィルタのため、それぞれ、(RGB)に分離し、最終的に合成されます。

dealMedianGaryボイド(* CONST SRCマット:: CV、CV :: *マットDST、N-INT、INT M)
{
[1] //初期化
* DST =(SRC *).clone();
// [2]カラーチャネル分離
STD ::ベクトル<CV ::マット>チャネル;
CV ::スプリット(SRCの*、チャネル);
// [3]フィルタリング
(INT I = 0;私は<3; I ++が)ため、{
MedianGary(&チャンネル[I ]、N-、M);
}
// [4]合成リターン。
CV ::(チャネル、* DST)をマージ;
返す;
}
。1
2
3
4
5
6
7
8
9
10
11
12である
13である
14
15
(3)メディアンフィルタ。メインルーチンは、スキャンされた画像の各画素が、その後、5×5画素に応じた矩形領域を決定し、ソーティング領域に戻り値を取得したデータは、出力画素の最終値が充填されています。
コードはわずか5 * 5処理を行うことができ、怠惰なブロガーは〜ハハハッハッハ、分類プロセスを書き、自分自身を書くことが興味を持っていません

(int型M、N INT、CV ::マット*のDST)MedianGaryを無効
{
unsigned char型* _medianArray = NULL;

// [2]初始化
_medianArray =(unsigned char型の*)のmalloc(はsizeof(unsigned char型)*(N×m個))。

printf( "5 * 5スタート... ... \ N");
// [2-1]扫描
{ため(; I <dst->高さI ++は、I = 0 INT)
のための(INT J = 0; J <dst->幅あり、j ++){
// [2-2]忽略边缘
IF((I> 1)&&(j> 1)&&(I <dst->高-2)
&&(J <dst->幅2))
{
// [2-3]保存数组
INT _count = 2;
(; NUM <(N×m個)NUM + = 5、_count-- INT NUM = 0)のための
{
画像データ+(I-_count)* dst-> _medianArray [NUM] = *((unsigned char型の*)(dst-> widthStep +(J-2)))。
_medianArray [NUM + 1] = *((unsigned char型の*)(dst->画像データ+(I-_count)* dst-> widthStep +(J-1)))。
_medianArray [NUM + 2] = *((unsigned char型の*)(dst->画像データ+(I-_count)* dst-> widthStep +(J)))。

_medianArray [NUMを+ 4] = *((unsigned char型の*)(dst->画像データ+(I-_count)* dst-> widthStep +(J + 2)));
}
// [2-5]と求めた値を記憶します
*((unsigned char型の*)(dst-> + I)は画像データ> widthStep + J dst- *)= medianValue(_medianArray、(N-Mの*));
[2-2]のため//}
}
} //のための[ 2-1]
}
。1
2
3
4
5
6
7
8
9
10
11
12である
13である
14
15
16
17
18である
。19
20
21であり、
22は
23である
24
25
26である
27
28
29
30
31であり
、当然のことながら、ソートここで使用される(4)行列、バブルあなたも速く放電やその他を使用することができます

// [##メジアンバブル##求め]
unsigned char型のmedianValue(_medianArray unsigned char型の*、int型COUNT)
{
unsigned char型のTEMPと、が
IをINT、J。

//バブリング
{; - ;(J ++ 1 J <COUNT J = 0)のため
のための(I = 0;私は<COUNT - 1 - J; Iは++)
{
IF(_medianArray [I]> _medianArray [I + 1])
{
TEMP = _medianArray [I];
_medianArray [I] = _medianArray [I 1 +];
_medianArrayは[I + 1] = TEMP;
}
}
}
; _medianArrayを[/ 2 COUNT]返します
}
--------- -------
免責事項:この記事は元の記事のCSDNブロガー「青城山山の僧」で、CC 4.0 BY-SAの著作権契約、複製、元のソースのリンクと、この文を添付してくださいに従ってください。
オリジナルリンクします。https://blog.csdn.net/qq_36359022/article/details/80116137

おすすめ

転載: www.cnblogs.com/qun115991/p/11710316.html