OpenCV計算機視覺處理 課件 模塊六 圖像平滑處理_第1頁
OpenCV計算機視覺處理 課件 模塊六 圖像平滑處理_第2頁
OpenCV計算機視覺處理 課件 模塊六 圖像平滑處理_第3頁
OpenCV計算機視覺處理 課件 模塊六 圖像平滑處理_第4頁
OpenCV計算機視覺處理 課件 模塊六 圖像平滑處理_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

OpenCV計算機視覺處理Computervisionprocessing模塊六

圖像平滑處理模塊概述本模塊將詳細介紹基于OpenCV的圖像平滑處理技術(shù),包括常見的圖像平滑算法、原理、實現(xiàn)方法以及應(yīng)用案例等。通過對這些內(nèi)容的深入學(xué)習(xí)和實踐,讀者將能夠掌握圖像平滑處理的基本方法和技巧,為后續(xù)的圖像處理任務(wù)奠定堅實的基礎(chǔ)。圖像平滑處理不僅是圖像處理的關(guān)鍵技術(shù),更體現(xiàn)了對信息真實性和準確性的追求。通過平滑處理,我們?nèi)コ龍D像噪聲,還原信息本質(zhì),這既是技術(shù)提升,也是科學(xué)精神的體現(xiàn)。在學(xué)習(xí)和實踐中,我們培養(yǎng)了對信息真實性的敬畏之心,為構(gòu)建信息社會貢獻正能量。黨的二十大報告明確指出,我們要以中國式現(xiàn)代化全面推進中華民族偉大復(fù)興,這就要求我們在各個領(lǐng)域持續(xù)創(chuàng)新、追求卓越。圖像平滑處理技術(shù)作為科技進步的一部分,正是我們響應(yīng)二十大精神、推動科技強國建設(shè)的重要實踐。我們要深入學(xué)習(xí)和應(yīng)用這一技術(shù),構(gòu)建更加美好的信息社會。學(xué)習(xí)導(dǎo)航學(xué)習(xí)目標1.知識目標(1)理解濾波器基本概念,了解其在圖像處理中的作用;(2)掌握均值濾波器的原理和使用方法;(3)了解方框濾波器的特點和與均值濾波器的關(guān)系;(4)掌握高斯濾波器的原理和使用方法;(5)了解雙邊濾波器的優(yōu)勢及其在保持邊緣信息中的作用;(6)探索自定義濾波器的基本概念和設(shè)計方法。學(xué)習(xí)目標2.能力目標(1)具備使用Python和OpenCV庫進行基本圖像平滑處理操作的能力;(2)能夠編寫代碼實現(xiàn)均值濾波、高斯濾波等基本濾波器,并觀察其效果;(3)能夠?qū)Ρ确治霾煌瑸V波器的效果,理解它們之間的區(qū)別和適用場景;(4)在理解基本濾波器原理的基礎(chǔ)上,嘗試設(shè)計簡單的自定義濾波器。學(xué)習(xí)目標3.素質(zhì)目標(1)培養(yǎng)實踐意識,通過動手實踐增強對圖像處理技術(shù)的理解和應(yīng)用能力;(2)激發(fā)學(xué)習(xí)興趣,通過對比不同濾波器的效果增強對圖像處理技術(shù)的興趣;(3)培養(yǎng)探索精神,在掌握基礎(chǔ)技能后嘗試探索新的圖像處理方法和技巧。任務(wù)一用均值濾波處理圖像

任務(wù)導(dǎo)入在實際應(yīng)用中,圖像往往受到各種噪聲的干擾,導(dǎo)致圖像質(zhì)量下降。均值濾波器是一種簡單而有效的去噪方法,通過計算像素鄰域內(nèi)的平均值來替代該像素的值,從而平滑圖像,減少噪聲。假設(shè)我們有一張包含噪聲的灰度圖像,我們的目標是使用均值濾波器去除噪聲,使圖像變得更加清晰。案例代碼1.import

cv2

2.import

numpy

as

np

3.#

第一步,讀取圖像

4.img

=

cv2.imread('noisy_image.jpeg')

5.#

轉(zhuǎn)換為灰度圖像(如果需要)

6.gray

=

cv2.cvtColor(img,

cv2.COLOR_BGR2GRAY)

7.#

第二步,應(yīng)用均值濾波

8.#

參數(shù)(5,

5)表示濾波器的大小,可以根據(jù)需要調(diào)整

9.blurred

=

cv2.blur(gray,

(5,

5))

10.#

第三步,顯示原始圖像和濾波后的圖像

11.dWindow('Original

Image',

0)

12.cv2.imshow('Original

Image',

gray)

案例代碼13.cv2.resizeWindow('Original

Image',(400,300))

14.dWindow('Blurred

Image',

0)

15.cv2.imshow('Blurred

Image',

blurred)

16.cv2.resizeWindow('Blurred

Image',(400,300))

17.#

等待按鍵,然后關(guān)閉窗口

18.cv2.waitKey(0)

19.cv2.destroyAllWindows()

案例結(jié)果原始圖像均值濾波后圖像知識拆解1.算法介紹:均值濾波算法是一種簡單的空間域濾波方法,主要用于去除圖像中的噪聲。該算法的核心思想是對圖像中的每一個像素點,用一個濾波器(通常是一個小的矩形窗口)覆蓋,然后計算該濾波器內(nèi)所有像素的平均值,將這個平均值賦給當前像素點。這樣,圖像的每一個像素點都被其周圍像素的平均值所替代,從而平滑了圖像,減少了噪聲的影響。然而,均值濾波的一個缺點是它可能會模糊圖像的邊緣,因為邊緣像素的灰度值變化較大,經(jīng)過平均處理后,邊緣信息可能會丟失。2.OpenCV中的均值濾波函數(shù)介紹:OpenCV提供了一個名為blur的函數(shù)來實現(xiàn)均值濾波。該函數(shù)接受一個源圖像和一個濾波器大小作為輸入,然后返回經(jīng)過均值濾波處理后的圖像。知識拆解3.函數(shù)語法格式:defblur(src,ksize,dst=None,anchor=None,borderType=None)4.函數(shù)參數(shù)介紹:src:輸入圖像,即需要進行均值濾波的原始圖像。ksize:濾波器的大小,必須取正奇數(shù),可以以一個數(shù)的形式出現(xiàn),表示濾波器的寬度和高度都相等;也可以是一個元組,例如(5,5),表示濾波器的寬度為5,高度也為5。dst:輸出圖像,即均值濾波后的圖像,是一個可選參數(shù)。anchor:錨點位置,表示濾波器核的錨點位置,該參數(shù)默認為濾波器的中心,通常不需要修改。borderType:像素外推法,決定了當濾波器覆蓋到圖像邊界時,如何處理邊界外的像素。通常使用默認值即可。知識運用1.import

cv2

as

cv

2.import

numpy

as

np

3.import

matplotlib.pyplot

as

plt

4.#

第一步,讀取圖像

5.img

=

cv.imread('test.jpg')

6.rgb_img

=

cv.cvtColor(img,

cv.COLOR_BGR2RGB)

7.#

第二步,均值濾波

8.blurred

=

cv.blur(img,

(5,

5))

9.#第三步,

顯示原圖和濾波后的圖像

10.titles

=

['Original

Image',

'Mean

Filter']

11.images

=

[rgb_img,

cv.cvtColor(blurred,

cv.COLOR_BGR2RGB)]

知識運用12.for

i

in

range(2):

13.

plt.subplot(1,

2,

i

+

1),

plt.imshow(images[i],

'gray')

14.

plt.title(titles[i])

15.

plt.xticks([]),

plt.yticks([])

16.plt.show()

圖像均值濾波前后對比知識運用1.import

cv2

2.import

matplotlib.pyplot

as

plt

3.#第一步,讀取圖像4.img

=

cv2.imread("hehua2.jpg")

5.#第二步,定義兩個不同大小的卷積核

進行濾波6.r5

=

cv2.blur(img,

(5,

5))

7.r10

=

cv2.blur(img,

(10,

10))

8.#第三步,顯示圖像9.res

=

cv2.cvtColor(img,

cv2.COLOR_BGR2RGB)

10.r5new

=

cv2.cvtColor(r5,

cv2.COLOR_BGR2RGB)

11.r10new

=

cv2.cvtColor(r10,

cv2.COLOR_BGR2RGB)

知識運用12.plt.subplot(131),

plt.imshow(res),

plt.axis('off'),

plt.title('in')

13.plt.subplot(132),

plt.imshow(r5new),

plt.axis('off'),

plt.title('r5')

14.plt.subplot(133),

plt.imshow(r10new),

plt.axis('off'),

plt.title('r10')

15.plt.show()

設(shè)置不同大小卷積核圖像均值濾波效果對比任務(wù)小結(jié)

均值濾波函數(shù)均值濾波的原理對圖像中的每一個像素點,用一個濾波器(通常是一個小的矩形窗口)覆蓋計算該濾波器內(nèi)所有像素的平均值,將這個平均值賦給當前像素點defblur(src,ksize,dst=None,anchor=None,borderType=None)ksize:濾波器的大小任務(wù)一

用均值濾波處理圖像任務(wù)二用方框濾波處理圖像

任務(wù)導(dǎo)入方框濾波(BoxFilter)是一種線性濾波方法,它的基本思想是在像素的鄰域內(nèi)取一個方框,并將方框內(nèi)所有像素的平均值(或加權(quán)平均值)作為該像素的新值。與均值濾波相比,方框濾波更加靈活,可以選擇是否對平均值進行歸一化處理。歸一化后的方框濾波等價于均值濾波,而未歸一化的方框濾波則常用于計算圖像的積分圖。本案例將演示如何使用方框濾波對圖像進行處理。案例代碼1.import

cv2

2.import

numpy

as

np

3.#

第一步,讀取圖像

4.img

=

cv2.imread('noisy_image.jpeg')

5.#

轉(zhuǎn)換為灰度圖像(如果需要)

6.gray

=

cv2.cvtColor(img,

cv2.COLOR_BGR2GRAY)

7.#第二步,

應(yīng)用方框濾波

8.#

參數(shù)(5,

5)表示濾波器的大小

9.#

normalize=True表示進行歸一化處理,等價于均值濾波

10.#

normalize=False表示不進行歸一化處理,通常用于計算積分圖

11.blurred

=

cv2.boxFilter(gray,

-1,

(5,

5),

normalize=True)

案例代碼12.#第三步,顯示原始圖像和濾波后的圖像

13.dWindow('Original

Image',

0)

14.cv2.imshow('Original

Image',

gray)

15.cv2.resizeWindow('Original

Image',

(400,

300))

16.dWindow('Box

Filtered

Image',

0)

17.cv2.imshow('Box

Filtered

Image',

blurred)

18.cv2.resizeWindow('Box

Filtered

Image',

(400,

300))

19.#

等待按鍵,然后關(guān)閉窗口

20.cv2.waitKey(0)

21.cv2.destroyAllWindows()

案例結(jié)果原始圖像方框濾波后的圖像知識拆解1.算法介紹:方框濾波算法是一種簡單但有效的圖像濾波方法。其核心思想是對圖像中的每一個像素點,用一個矩形濾波器(方框)覆蓋,然后計算濾波器內(nèi)所有像素值的平均值(或求和),并將這個平均值(或求和值)賦給當前像素點。當用于均值濾波時,方框濾波器的所有系數(shù)都相等,且和為1;而當用于圖像積分時,濾波器的系數(shù)都為1,用于快速計算圖像區(qū)域的像素和。通過調(diào)整濾波器的大小,可以控制平滑的程度。較大的濾波器會產(chǎn)生更平滑的圖像,但也可能模糊掉更多的細節(jié)。2.OpenCV中方框濾波函數(shù)介紹:在OpenCV中,方框濾波是通過boxFilter函數(shù)來實現(xiàn)的。這個函數(shù)可以根據(jù)不同的參數(shù)配置,實現(xiàn)均值濾波或圖像積分。3.函數(shù)語法格式:defboxFilter(src,ddepth,ksize,dst=None,anchor=None,normalize=None,borderType=None)知識拆解4.函數(shù)參數(shù)介紹:src:輸入圖像,即需要進行方框濾波的原始圖像。ddepth:輸出圖像的深度,-1表示使用與源圖像相同的深度。ksize:濾波器的大小,必須取正奇數(shù),可以以一個數(shù)的形式出現(xiàn),表示濾波器的寬度和高度都相等;也可以是一個元組,例如(5,5),表示濾波器的寬度為5,高度也為5。dst:輸出圖像,即方框濾波后的圖像,是一個可選參數(shù)。anchor:錨點位置,表示濾波器核的錨點位置,該參數(shù)默認為濾波器的中心,通常不需要修改。normalize:是否對濾波器內(nèi)的像素值進行歸一化。如果為True,則進行均值濾波;如果為False,則進行求和操作,相當于圖像積分。borderType:像素外推法,決定了當濾波器覆蓋到圖像邊界時,如何處理邊界外的像素。通常使用默認值即可。知識運用1.import

cv2

as

cv

2.import

numpy

as

np

3.import

matplotlib.pyplot

as

plt

4.#

第一步,讀取圖像

5.img

=

cv.imread('test.jpeg')

6.rgb_img

=

cv.cvtColor(img,

cv.COLOR_BGR2RGB)

7.#

灰度化處理圖像

8.grayImage

=

cv.cvtColor(img,

cv.COLOR_BGR2GRAY)

9.#第二步,方框濾波(均值濾波)

10.blurred

=

cv.boxFilter(grayImage,

-1,

(5,

5),

normalize=True)

11.#第三步,顯示原圖和濾波后的圖像

12.titles

=

['Original

Image',

'Box

Filter']

知識運用13.images

=

[rgb_img,

cv.cvtColor(blurred,

cv.COLOR_BGR2RGB)]

14.for

i

in

range(2):

15.

plt.subplot(1,

2,

i

+

1),

plt.imshow(images[i],

'gray')

16.

plt.title(titles[i])

17.

plt.xticks([]),

plt.yticks([])

18.plt.show()

圖像方框濾波前后對比任務(wù)小結(jié)

方框濾波函數(shù)方框濾波的原理對圖像中的每一個像素點,用一個矩形濾波器(方框)覆蓋,然后計算濾波器內(nèi)所有像素值的平均值(或求和),并將這個平均值(或求和值)賦給當前像素點。defboxFilter(src,ddepth,ksize,dst=None,anchor=None,normalize=None,borderType=None)任務(wù)二

用方框濾波處理圖像任務(wù)三用高斯濾波處理圖像

任務(wù)導(dǎo)入圖像在采集和傳輸過程中往往受到各種噪聲的干擾,如椒鹽噪聲、高斯噪聲等。高斯濾波器是一種有效的去噪方法,它采用高斯函數(shù)對圖像進行加權(quán)平均,能夠有效地抑制噪聲并保留圖像的邊緣信息。與均值濾波相比,高斯濾波在平滑圖像的同時,能夠更好地保護圖像的細節(jié)。本案例將演示如何使用高斯濾波對圖像進行處理。案例代碼1.import

cv2

2.import

numpy

as

np

3.#第一步,讀取圖像

4.img

=

cv2.imread('noisy_image.jpeg')

5.#

轉(zhuǎn)換為灰度圖像(如果需要)

6.gray

=

cv2.cvtColor(img,

cv2.COLOR_BGR2GRAY)

7.#

第二步,應(yīng)用高斯濾波

8.#

參數(shù)(5,

5)表示濾波器的大小,0表示標準差,可以根據(jù)需要調(diào)整

9.#

標準差設(shè)為0時,OpenCV會根據(jù)濾波器大小計算得出

10.blurred

=

cv2.GaussianBlur(gray,

(5,

5),

0)

11.#第三步,顯示原始圖像和濾波后的圖像

12.dWindow('Original

Image',

0)

案例代碼13.cv2.imshow('Original

Image',

gray)

14.cv2.resizeWindow('Original

Image',

(400,

300))

15.dWindow('Gaussian

Blurred

Image',

0)

16.cv2.imshow('Gaussian

Blurred

Image',

blurred)

17.cv2.resizeWindow('Gaussian

Blurred

Image',

(400,

300))

18.#

等待按鍵,然后關(guān)閉窗口

19.cv2.waitKey(0)

20.cv2.destroyAllWindows()

案例結(jié)果原始圖像高斯濾波后圖像知識拆解1.算法介紹:高斯濾波是一種線性平滑濾波,適用于消除高斯噪聲,廣泛應(yīng)用于圖像處理的減噪過程。其原理是對整幅圖像進行加權(quán)平均的過程,每一個像素點的值,都由其本身和鄰域內(nèi)的其他像素值經(jīng)過加權(quán)平均后得到。高斯濾波的具體操作是:用一個模板(或稱卷積核、濾波器)掃描圖像中的每一個像素,用模板確定的鄰域內(nèi)像素的加權(quán)平均灰度值去替代模板中心像素點的值。高斯濾波器的核心是高斯函數(shù),它表示的是像素鄰域的權(quán)重。高斯函數(shù)的形狀是一個鐘形曲線,中心點的權(quán)重最高,隨著距離中心點的距離增加,權(quán)重逐漸減小。這種特性使得高斯濾波器對邊緣的模糊程度較小,能夠較好地保留圖像的邊緣信息。2.OpenCV中高斯濾波函數(shù)介紹:在OpenCV中,高斯濾波是通過GaussianBlur函數(shù)實現(xiàn)的。這個函數(shù)會對輸入的圖像進行高斯濾波處理。知識拆解3.函數(shù)語法格式:defGaussianBlur(src,ksize,sigmaX,dst=None,sigmaY=None,borderType=None)函數(shù)參數(shù)介紹:src:輸入圖像,可以是單通道或多通道圖像。ksize:高斯核的大小,必須是正奇數(shù),且可以是形如(kx,ky)的元組,表示核在x和y方向上的大小。sigmaX:X方向上的高斯核函數(shù)標準差。dst:輸出圖像,即高斯濾波后的圖像,是一個可選參數(shù)。sigmaY:Y方向上的高斯核函數(shù)標準差;如果sigmaY為零,則它將被設(shè)置為與sigmaX相同;如果sigmaX和sigmaY都是0,那么它們將根據(jù)ksize計算得出。borderType:像素外推法,決定了當濾波器覆蓋到圖像邊界時,如何處理邊界外的像素。知識運用1.import

cv2

as

cv

2.import

numpy

as

np

3.import

matplotlib.pyplot

as

plt

4.#

第一步,讀取圖像

5.img

=

cv.imread('test.jpeg')

6.rgb_img

=

cv.cvtColor(img,

cv.COLOR_BGR2RGB)

7.#

灰度化處理圖像

8.grayImage

=

cv.cvtColor(img,

cv.COLOR_BGR2GRAY)

9.#

第二步,高斯濾波

10.blurred

=

cv.GaussianBlur(grayImage,

(5,

5),

0)

11.#

第三步,顯示原圖和濾波后的圖像

12.titles

=

['Original

Image',

'Gaussian

Blur']

知識運用13.images

=

[rgb_img,

cv.cvtColor(blurred,

cv.COLOR_BGR2RGB)]

14.for

i

in

range(2):

15.

plt.subplot(1,

2,

i

+

1),

plt.imshow(images[i],

'gray')

16.

plt.title(titles[i])

17.

plt.xticks([]),

plt.yticks([])

18.plt.show()

圖像高斯濾波前后對比知識運用1.import

cv2

2.import

math

3.import

numpy

as

np

4.import

matplotlib.pyplot

as

plt

5.#

第一步,定義一個函數(shù),將RGB圖像轉(zhuǎn)換為灰度圖像

6.def

rgb2gray(img):

7.

h

=

img.shape[0]

#

獲取圖像的高度

8.

w

=

img.shape[1]

#

獲取圖像的寬度

9.

img1

=

np.zeros((h,

w),

np.uint8)

#

創(chuàng)建一個與原圖大小相同的全零數(shù)組,用于存儲灰度圖像

10.

for

i

in

range(h):

11.

for

j

in

range(w):

知識運用12.

#

根據(jù)RGB到灰度的轉(zhuǎn)換公式計算每個像素的灰度值

13.

img1[i,

j]

=

0.144

*

img[i,

j,

0]

+

0.587

*

img[i,

j,

1]

+

0.299

*

img[i,

j,

1]

14.

return

img1

15.#

第二步,定義一個函數(shù),生成高斯核

16.def

gausskernel(size):

17.

sigma

=

1.0

#

高斯函數(shù)的標準差

18.

gausskernel

=

np.zeros((size,

size),

np.float32)

#

創(chuàng)建高斯核數(shù)組

19.

for

i

in

range(size):

20.

for

j

in

range(size):

21.

norm

=

math.pow(i

-

(size

//

2),

2)

+

math.pow(j

-

(size

//

2),

2)

#

計算每個點到中心的距離的平方

知識運用22.

#

根據(jù)高斯函數(shù)計算核的值

23.

gausskernel[i,

j]

=

math.exp(-norm

/

(2

*

math.pow(sigma,

2)))

24.

sum

=

np.sum(gausskernel)

#

計算高斯核的總和

25.

kernel

=

gausskernel

/

sum

#

歸一化高斯核

26.

return

kernel

27.#

第三步,定義一個函數(shù),對灰度圖像進行高斯濾波

28.def

gauss(img):

29.

h

=

img.shape[0]

#

獲取圖像的高度

30.

w

=

img.shape[1]

#

獲取圖像的寬度

31.

img1

=

np.zeros((h,

w),

np.uint8)

#

創(chuàng)建一個與原圖大小相同的全零數(shù)組,用于存儲濾波后的圖像

32.

kernel

=

gausskernel(3)

#

生成3x3大小的高斯核

知識運用33.

for

i

in

range(1,

h

-

1):

#

從第二行到倒數(shù)第二行遍歷

34.

for

j

in

range(1,

w

-

1):

#

從第二列到倒數(shù)第二列遍歷

35.

sum

=

0

36.

for

k

in

range(-1,

2):

#

遍歷高斯核的每一行

37.

for

l

in

range(-1,

2):

#

遍歷高斯核的每一列

38.

sum

+=

img[i

+

k,

j

+

l]

*

kernel[k

+

1,

l

+

1]

#

計算加權(quán)和

39.

img1[i,

j]

=

sum

#

將加權(quán)和賦值給濾波后的圖像

40.

return

img1

41.#

第四步,讀取圖像

42.image

=

cv2.imread("hehua3.jpg")

43.#

轉(zhuǎn)換為灰度圖像

44.grayimg

=

rgb2gray(image)

知識運用45.#

第五步,對灰度圖像進行高斯濾波

46.gaussimg

=

gauss(grayimg)

47.#第六步,

顯示圖像

48.#

OpenCV默認讀取圖像為BGR格式,但是matplotlib需要RGB格式,因此需要進行轉(zhuǎn)換

49.img

=

cv2.cvtColor(image,

cv2.COLOR_BGR2RGB)

50.thd

=

cv2.cvtColor(grayimg,

cv2.COLOR_BGR2RGB)

#

這里雖然轉(zhuǎn)換為RGB,但grayimg是灰度圖,顯示還是灰度效果

51.otsu

=

cv2.cvtColor(gaussimg,

cv2.COLOR_BGR2RGB)

#

同上,otsu顯示也是灰度效果

52.#

使用matplotlib顯示圖像

53.plt.subplot(131),

plt.imshow(img),

plt.axis('off'),

plt.title('image')

#

顯示原圖

知識運用54.plt.subplot(132),

plt.imshow(thd),

plt.axis('off'),

plt.title('grayimg')

#

顯示灰度圖

55.plt.subplot(133),

plt.imshow(otsu),

plt.axis('off'),

plt.title('gaussimg')

#

顯示高斯濾波后的圖像

56.plt.show()

#

顯示整個圖像窗口

定義高斯核函數(shù)處理圖像效果任務(wù)小結(jié)

高斯濾波函數(shù)高斯濾波的原理用一個模板(或稱卷積核、濾波器)掃描圖像中的每一個像素,用模板確定的鄰域內(nèi)像素的加權(quán)平均灰度值去替代模板中心像素點的值。defGaussianBlur(src,ksize,sigmaX,dst=None,sigmaY=None,borderType=None)任務(wù)三

用高斯濾波處理圖像任務(wù)四用雙邊濾波處理圖像

任務(wù)導(dǎo)入在圖像處理中,為了去除圖像中的噪聲,我們常常使用各種濾波器。然而,傳統(tǒng)的濾波器(如均值濾波器)在平滑噪聲的同時,往往會模糊圖像的邊緣信息,導(dǎo)致圖像細節(jié)丟失。雙邊濾波器則是一種能夠在去除噪聲的同時保持邊緣清晰的有效方法。它通過同時考慮像素的空間鄰近度和像素值相似度來確定濾波器的權(quán)重,從而在平滑圖像的同時保留邊緣細節(jié)。本案例將演示如何使用雙邊濾波對圖像進行處理。案例代碼1.import

cv2

2.import

numpy

as

np

3.#

第一步,讀取圖像

4.img

=

cv2.imread('noisy_image.jpeg')

5.#

轉(zhuǎn)換為灰度圖像(如果需要)

6.gray

=

cv2.cvtColor(img,

cv2.COLOR_BGR2GRAY)

7.#

第二步,應(yīng)用雙邊濾波

8.#

參數(shù)d表示濾波時考慮的空間鄰域的直徑范圍

9.#

參數(shù)sigmaColor表示顏色空間濾波器的標準差

10.#

參數(shù)sigmaSpace表示坐標空間中濾波器的標準差

11.filtered

=

cv2.bilateralFilter(gray,

d=9,

sigmaColor=75,

sigmaSpace=75)

案例代碼12.#

第三步,顯示原始圖像和濾波后的圖像

13.dWindow('Original

Image',

0)

14.cv2.imshow('Original

Image',

gray)

15.cv2.resizeWindow('Original

Image',

(400,

300))

16.dWindow('Bilateral

Filtered

Image',

0)

17.cv2.imshow('Bilateral

Filtered

Image',

filtered)

18.cv2.resizeWindow('Bilateral

Filtered

Image',

(400,

300))

19.#

等待按鍵,然后關(guān)閉窗口

20.cv2.waitKey(0)

cv2.destroyAllWindows()

案例結(jié)果原始圖像雙邊濾波后圖像知識拆解1.算法介紹:雙邊濾波(BilateralFilter)是一種非線性濾波方法,它結(jié)合了圖像的空間鄰近度和像素值相似度的一種折中處理,同時考慮空域信息和灰度相似性,達到保邊去噪的目的。雙邊濾波在保持邊緣的同時,有效地去除噪聲。由于雙邊濾波同時考慮了空間域與像素值域的差別,因此能較好地保持圖像的邊緣信息,對于圖像中的高頻細節(jié)保護效果很好。雙邊濾波函數(shù)在空域(即普通的濾波器)進行高斯平滑的同時,也考慮像素之間的灰度相似性,確保邊緣附近像素值不會混合過多,從而達到保邊去噪的目的。簡單來說,雙邊濾波的權(quán)重不僅考慮了像素的歐氏距離(如高斯濾波),還考慮了像素值之間的差值,因此可以保持邊緣清晰。2.OpenCV中的雙邊濾波函數(shù)介紹:在OpenCV中,雙邊濾波是通過bilateralFilter函數(shù)實現(xiàn)的。這個函數(shù)會對輸入的圖像進行雙邊濾波處理,從而去除噪聲并保留邊緣信息。知識拆解3.函數(shù)語法格式:defbilateralFilter(src,d,sigmaColor,sigmaSpace,dst=None,borderType=None)函數(shù)參數(shù)介紹:src:輸入圖像,可以是單通道或多通道圖像。d:在濾波期間每個像素鄰域的直徑范圍。這個值決定了濾波器的空間域大小。sigmaColor:顏色空間濾波器的標準差。較大的值意味著像素鄰域中將有更多的混合顏色,從而使濾波結(jié)果更加平滑。sigmaSpace:坐標空間中濾波器的標準差(以像素為單位)。它決定了在濾波過程中,每個像素如何受到其周圍像素的影響。sigmaSpace取值較大時,更遠的像素將對當前像素的濾波結(jié)果產(chǎn)生更大的影響,從而使濾波結(jié)果更加平滑。相反,一個較小取值意味著只有較近的像素對當前像素的濾波結(jié)果有顯著影響,從而保留更多的細節(jié)。dst:輸出圖像,即雙邊濾波后的圖像,是一個可選參數(shù)。borderType:像素外推法,決定了當濾波器覆蓋到圖像邊界時,如何處理邊界外的像素。知識運用1.import

cv2

as

cv

2.import

numpy

as

np

3.import

matplotlib.pyplot

as

plt

4.#第一步,讀取圖像

5.img

=

cv.imread('test.jpeg')

6.rgb_img

=

img

7.#

灰度化處理圖像(如果需要)

8.grayImage

=

cv.cvtColor(img,

cv.COLOR_BGR2GRAY)

9.#

第二步,雙邊濾波

10.bilateral

=

cv.bilateralFilter(img,

d=9,

sigmaColor=75,

sigmaSpace=75)

11.#

第三步,顯示原圖和濾波后的圖像

12.titles

=

['Original

Image',

'Bilateral

Filter']

知識運用13.images

=

[rgb_img,

bilateral]

14.for

i

in

range(2):

15.

plt.subplot(1,

2,

i

+

1),

plt.imshow(cv.cvtColor(images[i],

cv.COLOR_BGR2RGB))

16.

plt.title(titles[i])

17.

plt.xticks([]),

plt.yticks([])

18.plt.show()

圖像雙邊濾波前后對比知識運用1.import

cv2

2.import

matplotlib.pyplot

as

plt

3.#第一步,讀取圖像4.img

=

cv2.imread("hehua3.jpg")

5.#第二步,中值濾波

6.g

=

cv2.GaussianBlur(img,

(55,

55),

0,

0)

7.b

=

cv2.bilateralFilter(img,

55,

100,

100)

8.#第三步,顯示圖像

9.res

=

cv2.cvtColor(img,

cv2.COLOR_BGR2RGB)

10.out1

=

cv2.cvtColor(g,

cv2.COLOR_BGR2RGB)

11.out2

=

cv2.cvtColor(b,

cv2.COLOR_BGR2RGB)

知識運用12.plt.subplot(131),

plt.imshow(res),

plt.axis('off'),

plt.title('in')

13.plt.subplot(132),

plt.imshow(out1),

plt.axis('off'),

plt.title('Gaussian')

14.plt.subplot(133),

plt.imshow(out2),

plt.axis('off'),

plt.title('bilateral')

15.plt.show()

雙邊濾波和高斯濾波對比用雙邊濾波處理圖像任務(wù)小結(jié)

雙邊濾波函數(shù)雙邊濾波的原理雙邊濾波函數(shù)在空域(即普通的濾波器)進行高斯平滑的同時,也考慮像素之間的灰度相似性,確保邊緣附近像素值不會混合過多,從而達到保邊去噪的目的。defbilateralFilter(src,d,sigmaColor,sigmaSpace,dst=None,borderType=None)任務(wù)四

用雙邊濾波處理圖像任務(wù)五用自定義濾波處理圖像

任務(wù)導(dǎo)入在圖像處理中,濾波器扮演著非常重要的角色,用于實現(xiàn)各種圖像增強和去噪的效果。雖然OpenCV提供了許多內(nèi)置的濾波器,如均值濾波器、高斯濾波器等,但在某些特定場景下,我們可能需要根據(jù)實際需求自定義濾波器。自定義濾波器可以根據(jù)具體的圖像特征和噪聲類型來設(shè)計,從而更精準地處理圖像。本案例將演示如何使用Python和OpenCV庫實現(xiàn)自定義濾波處理圖像,原始圖像如圖6-16所示。案例代碼1.import

cv2

2.import

numpy

as

np

3.#

第一步,讀取圖像

4.img

=

cv2.imread('noisy_image.jpeg')

5.#

轉(zhuǎn)換為灰度圖像(如果需要)

6.gray

=

cv2.cvtColor(img,

cv2.COLOR_BGR2GRAY)

7.#

第二步,自定義濾波器核

8.#

這里的核是一個簡單的3x3平均濾波器,但你可以根據(jù)需要修改它

9.kernel

=

np.ones((3,

3),

np.float32)

/

9

10.#

第三步,應(yīng)用自定義濾波

11.filtered

=

cv2.filter2D(gray,

-1,

kernel)

案例代碼12.#

第四步,顯示原始圖像和濾波后的圖像

13.dWindow('Original

Image',

0)

14.cv2.imshow('Original

Image',

gray)

15.cv2.resizeWindow('Original

Image',

(400,

300))

16.dWindow('Custom

Filtered

Image',

0)

17.cv2.imshow('Custom

Filtered

Image',

filtered)

18.cv2.resizeWindow('Custom

Filtered

Image',

(400,

300))

19.#

等待按鍵,然后關(guān)閉窗口

20.cv2.waitKey(0)

21.cv2.destroyAllWindows()

案例結(jié)果原始圖像自定義濾波后圖像知識拆解1.算法介紹:

自定義濾波是一種靈活的圖像處理技術(shù),允許用戶根據(jù)特定的應(yīng)用需求自行設(shè)計合適的濾波器(或稱為卷積核),并將其應(yīng)用于圖像的每個像素。通過自定義濾波,可以實現(xiàn)各種圖像處理效果,如銳化、模糊、邊緣檢測等。2.OpenCV中的自定義濾波函數(shù)介紹:在OpenCV中,可以使用filter2D函數(shù)來實現(xiàn)自定義濾波。這個函數(shù)允許用戶指定自己的卷積核,并將其應(yīng)用于輸入圖像。通過調(diào)整卷積核的值和大小,可以控制濾波器的行為,從而實現(xiàn)不同的圖像處理效果。3.函數(shù)語法格式:deffilter2D(src,ddep

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論