opencvラーニングセブン:畳み込みを使用して画像をぼかす

ファジー演算

方法:平均ぼかし、中央値ぼかし、カスタムぼかしぼかしの
原理:
離散畳み込みに基づいて、異なる畳み込みは異なる畳み込み効果を取得し、ぼかしは畳み込みの外観です。

たたみ込みの原理:
(2 x 1 + 3 x 1 + 6 x 1)3 = 3で割った
エッジ2と1はたたみ込みによって保存され
ませんエッジはたたみ込みに参加せず、直接保存されます。これは平均的なファジー
ここに画像の説明を挿入リファレンスブログである必要がありますOpenCV-ファジー操作

1.ファジー平均:

コードは次のように表示されます。

import cv2 as cv
import numpy as np

#均值模糊:去除随机噪声
def blur_demo(image):
    dst = cv.blur(image, (5, 5))#ksize是卷积核大小1行3列,列数越大模糊越大
    cv.imshow("blur_demo", dst)
    
src = cv.imread("C:/Users/lenovo/Desktop/opencv/daima/banknum/template-matching-ocr/images/lena.jpg")  #读取图片位置
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
blur_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

スクリーンショットの実行:
ここに画像の説明を挿入1。平均ブラー関数blur():定義:blur(src、ksize、dst = None、anchor = None、borderType = None)

定義では、5つのパラメーターがありますが、最後の3つはすべてなしであるため、2つのパラメーター
があります
。src:処理される元の画像ksize:周囲のピクセルの範囲:コード内の(5、5)は次のサイズです。 9 * 5、これらの範囲の平均値を計算して、中心位置のサイズを決定します

Opencvには、使用するための特別な平均フィルターテンプレートがあります-正規化された畳み込みテンプレート。すべてのフィルターテンプレートは、畳み込みボックスでカバーされる領域のすべてのピクセルにテンプレートを掛けた後の中央のピクセルの値です。
Opencvの平均テンプレートはcv2.blurとcv2.boxFilterです。たとえば、3 * 3テンプレートは実際には次のように表すことができます。

ここに画像の説明を挿入
テンプレートサイズはm * nで、設定できます。以前の1/9が必要ない場合は、正規化されていないテンプレートcv2.boxFilterを使用できます。

2.メジアンブラーmediaBlur
メジアンフィルターテンプレートは、ノイズ除去の目的を達成するために、中心値を畳み込みボックス内のピクセルのメジアン値に置き換えることです。
このテンプレートは通常、塩とコショウのノイズを除去するために使用されます。
以前のフィルターはすべて、中央のピクセルの値を置き換えるために計算された新しい値を使用しますが、中央値フィルターはそれを中央のピクセル(またはそれ自体)の周りの値に置き換えます。畳み込みカーネルのサイズも奇数です。
コードは次のように表示されます。

import cv2 as cv
import numpy as np
#中值模糊,对于椒盐噪声的去噪效果好,去掉图片中的一些黑点等
def median_blur_demo(image):
    dst = cv.medianBlur(image, 5)#ksize是卷积核大小1行3列,列数越大模糊越大
    cv.imshow("median_blur_demo", dst)
src = cv.imread("C:/Users/lenovo/Desktop/opencv/daima/banknum/template-matching-ocr/images/lena.jpg")  #读取图片位置
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
median_blur_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()
    

実行中のスクリーンショット:
ここに画像の説明を挿入これにはノイズがないため、効果は明ら​​かではありません。私はまだこの例が好きです:
ノイズ除去

中央値ブラー関数medianBlur():定義:medianBlur(src、ksize、dst = None)
ksizeはblur()関数とは異なります。これは行列ではなく数値です。たとえば、5は5 * 5の正方行列を意味します。 。

3.カスタムファジーfilter2D(上記は2Dフィルターにカプセル化されています)
画像フィルター関数imfilter関数アプリケーションとその拡張Opencv
は一般的な2Dフィルター関数cv2.filter2D()を提供します。フィルター関数
の使用にはコアが必要ですテンプレート、画像フィルタリングの操作プロセスは次のとおりです。合計テンプレートを画像のピクセルAに配置し、対応する画像の各ピクセルの合計を見つけます。
コアが異なり、結果が異なり、フィルターのコアもこのカーネルテンプレートを使用する場合、フィルター機能は単一チャネル操作で
あることに注意してください。つまり、カラー画像フィルタリングでは、カラー画像の各チャネルを抽出する必要があり、各チャネルは個別にフィルタリングされます。
3.1
次のように中央値ファジーコードを実装します。

import cv2 as cv
import numpy as np

#自定义模糊
def custom_blur_demo(image):
    kernel = np.ones([5, 5], np.float32)/25#声明二维数组5*5,初始化1,保证值不溢出,除以数组大小,实现中值模糊  自定义卷积核的算子
    dst = cv.filter2D(image, -1, kernel=kernel)
    cv.imshow("custom_blur_demo", dst)

src = cv.imread("C:/Users/lenovo/Desktop/opencv/daima/banknum/template-matching-ocr/images/lena.jpg")  #读取图片位置
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
custom_blur_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

上で生成された5 * 5カーネルテンプレートは、実際には平均フィルターです。、/ 25の場合、中央値フィルタリング、正規化処理を意味します

スクリーンショットの実行:
ここに画像の説明を挿入使用される関数は次のとおりです。filter2D():filter2D(src、ddepth、kernel)として定義されています

ddepth:深さ、入力値が-1の場合、ターゲット画像と元の画像の深さは同じままです。
カーネル:畳み込みカーネル(または関連するカーネル)、単一チャネルの浮動小数点行列。
さまざまなブラーを実現できますカーネル行列を変更することによって

3.2シャープニングの実装
コードは次のとおりです。

import cv2 as cv
import numpy as np

#自定义模糊
def custom_blur_demo(image):
    kernel = np.array(([[0, -1, 0], [-1, 5, -1], [0, -1, 0]]), np.float32)
    #中间的像素比重为5 其他和为0和-1 总权重为1,算子自定义取值。总和为0:做边缘梯度。总和为1:做锐化增强
    dst = cv.filter2D(image, -1, kernel=kernel)
    cv.imshow("custom_blur_demo", dst)

src = cv.imread("C:/Users/lenovo/Desktop/opencv/daima/banknum/template-matching-ocr/images/lena.jpg")  #读取图片位置
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
custom_blur_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

スクリーンショットを実行する:
ここに画像の説明を挿入たくさんのことを学びましたが、まだよくわかりません。後で追加します

おすすめ

転載: blog.csdn.net/weixin_44145452/article/details/112462955