OpenCVのフィルタ
OpenCVでフィルタを使うには、自分でカーネルを作成して畳み込み演算で作成する方法以外に、OpenCVで準備しているフィルタがあります。
ここでは便利なフィルタの紹介をします。
Sobelフィルタ
Sobelフィルタはcv2.Sobel関数で簡単に使うことができます。
Sobel フィルタは、輪郭検出に用いられる微分フィルタです。
cv2.Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]])
* src: 入力画像
* dst: 出力画像
* ddepth: 出力の色深度
* dx: x方向の微分の次数
* dy: y方向の微分の次数
* ksize: カーネルサイズ、1, 3, 5, 7のどれかを指定
img_sobelx = cv2.Sobel(img,cv2.CV_32F,1,0,ksize=3) img_sobely = cv2.Sobel(img,cv2.CV_32F,0,1,ksize=3) plt.figure(figsize=(6, 6), dpi=72) plt.imshow(img_sobelx) plt.show()
plt.figure(figsize=(6, 6), dpi=72) plt.imshow(img_sobely) plt.show()
Laplacianフィルタ
Laplacianフィルタは、二次微分を利用して画像から輪郭を抽出する空間フィルタです。
cv2.Laplacian(src, ddepth[, dst[, ksize[, scale[, delta[, borderType]]]]])
* src: 入力画像
* dst: 出力画像
* ddepth: 出力の色深度
* ksize: カーネルサイズ
img_lap = cv2.Laplacian(img,cv2.CV_32F) plt.figure(figsize=(6, 6), dpi=72) plt.imshow(img_lap) plt.show()
GaussianBlur
GaussianBlurは、画像の平滑化に使われるフィルタの1つです。ガウス分布を利用して、注目画素からの距離に応じて近傍の画素値に重みをかけます。
cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]])
* src –入力画像; 画像は、独立して処理される任意の数のチャンネルを有することができるが、深さがなければならないCV_8U、CV_16U、CV_16S、CV_32FまたはCV_64F。
* dst –と同じサイズとタイプの出力画像src。
* ksize –ガウスカーネルサイズ。 ksize.width そして、 ksize.height 異なることがありますが、それらの両方が正の奇数でなければなりません。または、それらはゼロにすることができ、次にから計算され sigma*ます。
* sigmaX – X方向のガウスカーネル標準偏差。
* sigmaY – Y方向のガウスカーネル標準偏差。sigmaY がゼロの場合 はに等しく設定され sigmaX、両方のシグマがゼロの場合は、それぞれksize.width と から計算され ksize.heightます(詳細は getGaussianKernel()を参照)。完全にかかわらず、すべてこの意味の可能な将来の変更の結果を制御するために、すべてを指定することをお勧めしますksize、sigmaXとsigmaY。
* borderType –ピクセル外挿法(詳細は borderInterpolate()を参照)
img_blur = cv2.GaussianBlur(img,(21,21),2) plt.imshow(img_blur) plt.show()
blur関数で画像の平滑化
フィルターを作成しなくても、blur関数で簡単に平滑化できます。
imgb_bgr =cv2.imread('building.jpg') imgb = cv2.cvtColor(imgb_bgr, cv2.COLOR_BGR2RGB) # 標準の画像 plt.imshow(imgb) plt.show()
blur関数を使った例
img_blur = cv2.blur(imgb,(3,3)) plt.imshow(img_blur) plt.show()
medianBlur
medianBlurを使った例
img_me = cv2.medianBlur(imgb, 5) plt.imshow(img_me) plt.show()
bilateralFilter
bilateralFilterを使った例
img_bi = cv2.bilateralFilter(imgb, 20, 30, 30) plt.imshow(img_bi) plt.show()
コメントを投稿するにはログインしてください。