opencv 平均スムージング ブラー、メディアン スムージング medianBlur、ガウス スムージング GaussianBlur()、バイラテラル スムージング bilarateFilter()


1.平均平滑化Blur()の平均平滑化スライディング ウィンドウのすべての係数は、1/(ウィンドウの高さ * ウィンドウの幅) です。

dst=cv2.blur(src, ksize[, dst[, anchor[, borderType]]])

src: ソース画像、チャネル数に制限はありません、データ型は CV_8U、CV_16U、CV_16S、CV_32F または CV_64F である必要があります; ksize: カーネル
サイズ、ウィンドウ サイズ、タプル タイプ、要素値は偶数または奇数にすることができます;
アンカー: アンカーpoint、デフォルトは (-1,-1) で、スライディング ウィンドウの中心点に作用します。borderType
: 境界線処理タイプ。

img_ret = cv2.blur(img,(3,3))

2. メディアン スムージング medianBlur()
メディアン スムージングも平均スムージングと同様にスライディング ウィンドウを使用しますが、スライディング ウィンドウ内で加重和を計算するのではなく、元の画像のスライディング ウィンドウ内でソートされたすべてのピクセル値の中央値を使用します。 .value を新しい画像のピクセル値として使用します。
dst=cv2.medianBlur(src, ksize[, dst])
src: ソース イメージ、チャネル数は 1、3、または 4 です。ksize が 3 または 5 の場合、データ タイプは CV_8U、CV_16U、CV_32F です。より大きな ksize を使用する場合、データ タイプは CV_8U、ksize のみです。
: カーネル サイズ、ウィンドウ サイズ、整数型、1 より大きい奇数値。

img_ret = cv2.medianBlur(img,3)

3. ピクセル値コントラスト
スムージングは​​、ローパス フィルターとみなすことができる画像フィルター処理の一種で、画像の高周波「信号」を除去し、画像をぼやけて滑らかに見せます。ピクセル値を変更することによって、変更前と変更後の画像の曲線を描くことで、このスムージング効果をより視覚的に確認できます。

4. ガウス平滑化GaussionBlur()
ガウス平滑化は、中心点からの距離に応じて重みが異なるため、より「従来的」な方法のように思えます。

ガウス分布の曲線が見られます(μ=0の場合):
x=0のときf(x)の値が最も大きく、xが両側に変化するとf(x)の値はどんどん小さくなります;
この曲線は x にあります =0 の 2 つの辺は対称です、f(-1)=f(1)、f(-2)=f(2); σ が大きいほど、曲線は平坦になり、σ が低くなると
、 x=0のときの値。

OpenCVでは2次元ガウス分布が使用されます。

matplotlib を使用して 2 次元ガウス分布をプロットします。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = Axes3D(fig) 
X = np.arange(-3, 3.1, 0.1,dtype=np.float64).reshape(-1,1)
Y = np.arange(-3, 3.1, 0.1,dtype=np.float64)
mux,muy=0,0
sigmax,sigmay = 0.8,0.8
expont = -0.5*(((X-mux)/sigmax)**2 + ((Y-muy)/sigmay)**2)
Z=np.exp(expont)/(2*np.pi*sigmax*sigmay)
ax.plot_surface(X, Y, Z, rstride=2, cstride=2, cmap=cm.viridis)
plt.show()

GaussianBlur() のインターフェイス形式:
dst=cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]])

src: チャネルの数は任意で、実際の処理はチャネルに分割されます。画像の深さは CV_8U、CV_16U、CV_16S、CV_32F または CV_64F のみです。ksize: タプル タイプ、ウィンドウ サイズ、幅と高さは異なる場合がありますが、異なる値である必要があります
。正の奇数である必要があります。0 に設定すると、シグマに基づいて計算されます。
sigmaX: 画像の標準偏差
0を渡した場合、ksizeに基づいてsigmaXとsigmaXが計算されます;
borderType: 境界線の処理方法;

: GaussianBlur の最初の文字は大文字の G で、小さなキャメルケースの命名スタイルを使用する他のほとんどの OpenCV 関数名とは少し異なります。

スライディングウィンドウの中心点を原点としているため、中心点の重み (x, y) = (0, 0) が最大値となるように、μ1 とμ2 を両方とも 0 に設定します。 OpenCV のガウス スムージング。ガウス スムージング関数を呼び出すときは、σ1 (sigmaX) と σ2 (sigmaY) を渡すだけで済みます。

img_ret = cv2.GaussianBlur(img,(11,11),0)
imshow(cv2.cvtColor(img_ret,cv2.COLOR_BGR2RGB))

ガウス分布曲線の特性に対応し、シグマが大きいほど原点の値は小さく、周囲の点の値は大きくなり、画像上の中心点の重みが低くなることに対応し、周囲のポイントの重みが高くなるため、シグマが大きくなり、画像がぼやけます。
5. バイラテラル スムージング biliteralFilter()
平均値、中央値、およびガウス スムージング ノイズ除去は「無関心な攻撃」です。すべてのピクセルは同じ重み付け係数の影響を受けるため、スムージング プロセス中に画像のエッジも影響を受けます。(ここでピクセルは)値が急激に変化する場合)、次に紹介するバイラテラルフィルタリングは、画像のエッジを維持したままノイズを除去することができる「ノイズエッジ保存」です。

bi LateralFilter() のインターフェイス形式:
dst=cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace[, dst[, borderType]])

src: 8bitまたは浮動小数点型; 1または3チャネル;
d: ウィンドウサイズ、正でない場合はsigmaSpaceに従って計算; d>5の場合は速度が遅くなります。 、d>=9 を選択できますが、この時間は時間に敏感な処理には適していません;
sigmaColor: 明るさの差のシグマ パラメータ;
sigmaSpace: の X および Y (行、列) 方向に作用する空間距離のシグマ パラメータ同時に画像;
borderType: 境界線の処理方法;

スライディング ウィンドウ サイズのパラメーターのうち、ガウス スムージングの ksize パラメーターは幅と高さが等しくなくてもよいタプルですが、両側スムージングに使用されるパラメーター d は整数型であり、スライディング ウィンドウの幅と高さも決定します。ウィンドウは等しいです。

d が 0 より小さい場合は、sigma_space*1.5 を使用して丸め、半径を取得します。d が 0 より大きい場合は、最初に 2 で割って半径を取得し、次に半径を 1 と比較して大きい方の値を取得し、最後に乗算します。 2を割って1を加えるので、得られるdは3以上の奇数であることが保証されます。

sigmaColor および sigmaSpace パラメータが比較的小さい (<10) 場合、スムージング効果はあまり明らかではありません。パラメータが比較的大きい場合、または複数のスムージング後の画像は漫画のように見えます。

img_ret = cv2.bilateralFilter(img,7,25,25)
img_edge=cv2.Sobel(img_ret,cv2.CV_8U,1,0,ksize=3)

色 (エッジ) に突然変化がある場合、ガウス スムージングでは境界線の約半分のみが保持されますが、両側スムージングでは境界線のほぼすべてが保持され、ガウス スムージングのエッジの平均輝度は両側スムージングほど高くありません。

平均値および中央値のスムージングと比較して、ガウス スムージングは​​「従来の」値により一致しており、ピクセル間の空間距離が近いほど、新しいピクセルの値を計算する際に使用される重みが大きくなります。平均値平滑化、中央値平滑化、ガウス平滑化は画像全体を無差別に平滑化するもので、固定係数のスライディングウィンドウが画像全体に作用するため、平滑化画像はノイズが処理されますが、エッジ部分も弱められます。双方向平滑化は、ガウス平滑化で使用される係数にピクセル差のガウス関数を乗算したものに基づいています。中心点のピクセル差が大きいほど、全体の係数値は小さくなります。最終的に、ノイズ除去とエッジ保存の効果が得られます。達成。

おすすめ

転載: blog.csdn.net/aqiangdeba/article/details/129767116