亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Programming Computer Vision with Python (學(xué)習(xí)筆記六)

MageekChiu / 2583人閱讀

摘要:由所有邊緣增強(qiáng)像素組成的新圖像,稱為邊緣增強(qiáng)圖像。交叉算子上述使用差分方法得出亮度變化梯度其實(shí)就是一階微分的近似值。

邊緣檢測(cè)(edge detection)是最重要的圖像處理技術(shù)之一,圖像邊緣檢測(cè)大幅度地減少了數(shù)據(jù)量,并且剔除了可以認(rèn)為不相關(guān)的信息,保留了圖像重要的結(jié)構(gòu)屬性,為后續(xù)圖像理解方法提供了基礎(chǔ)。

邊緣檢測(cè)方法

從視覺上看,圖像中的邊緣處亮度較周圍強(qiáng),比如對(duì)一垂直方向的邊緣,可以通過水平方向像素亮度的一階微分(導(dǎo)數(shù))來增強(qiáng)亮度變化。所以邊緣檢測(cè)可以通過計(jì)算圖像水平和垂直兩個(gè)方向的亮度變化梯度,從而得到亮度變化的幅度和方向。

設(shè)Ix和Iy分別是兩個(gè)方向的亮度梯度向量,兩個(gè)向量的模就是梯度幅度:

兩個(gè)向量的夾角就是變化方向:

簡單的亮度變化計(jì)算也可以使用差分方法,比如對(duì)于水平方向的某像素,將它左右相鄰像素的差值作為亮度變化的估算,垂直方向類推,也可以估算出圖像的邊緣。由所有邊緣增強(qiáng)像素組成的新圖像,稱為邊緣增強(qiáng)圖像。邊緣增強(qiáng)圖像可以通過群運(yùn)算來得出。

群運(yùn)算與算子

如果對(duì)原圖像進(jìn)行像素運(yùn)算得出新圖像,新圖像的每一個(gè)像素點(diǎn)需要從原圖像周圍點(diǎn)基于某個(gè)算法計(jì)算出來的,這種運(yùn)算叫群運(yùn)算。群運(yùn)算通常以圖像和模板卷積形式來表示,這里說的模板,就是決定周圍像素如何綜合計(jì)算的算法,也叫算子(operator)。上篇筆記介紹的高斯模糊介紹過高斯平均算子,算子以一個(gè)小矩陣的形式表示,每個(gè)元素標(biāo)明了對(duì)應(yīng)像素的權(quán)值或系數(shù)。下面這張示意圖可以幫助理解:

圖中的convolution mask指的就是模板或算子,它就像一個(gè)移動(dòng)的遮罩層一樣,遮罩在原圖像上面,遮罩部分的每個(gè)像素,各自與模板對(duì)應(yīng)位置的權(quán)值做乘積,最后全部加起來作為模板中心點(diǎn)對(duì)應(yīng)的原圖像位置的新像素值。

Roberts交叉算子

上述使用差分方法得出亮度變化梯度其實(shí)就是一階微分的近似值。差分除了可以使用沿坐標(biāo)軸方向的兩個(gè)像素來計(jì)算,也可以使用對(duì)角像素來計(jì)算。Roberts交叉算子就屬于這種算子,是最早的邊緣檢測(cè)算子之一。Roberts交叉算子可以準(zhǔn)確定位邊緣處,但這些只檢測(cè)亮度增強(qiáng)位置的基本算子,對(duì)噪聲敏感,容易將噪聲誤當(dāng)成邊緣。

Prewitt算子

在計(jì)算亮度變化之前,先對(duì)周圍像素進(jìn)行均值處理,這樣對(duì)噪聲有一定的抑制作用,但是,邊緣處會(huì)產(chǎn)生模糊,邊緣的定位不如Roberts算子。

Sobel算子
Sobel是應(yīng)用比較多的算子,它也考慮均值處理來抑制噪聲,但它的技巧是只在一條軸上進(jìn)行均值處理,而在另一條軸上加大權(quán)值來計(jì)算亮度變化。這樣得出來的效果比前兩者更好。雖然使用Sobel算子得出的邊緣不如Canny算子的準(zhǔn)確,但它在實(shí)際應(yīng)用中效率比Canny高,在很多實(shí)際應(yīng)用的場(chǎng)合成為首選,尤其是對(duì)效率要求較高,而對(duì)細(xì)紋理不太關(guān)心的時(shí)候。

Prewitt和Sobel在計(jì)算導(dǎo)數(shù)方法上都存在一些缺陷:濾波器的尺度需要隨著圖像分辨率的變化而變化。為了在圖像噪聲方面更穩(wěn)健,以及在任意尺度上計(jì)算導(dǎo)數(shù),我們可以使用高斯導(dǎo)數(shù)濾波器。即我們上個(gè)筆記用到的高斯模糊濾波器:scipy.ndimage.filters.gaussian_filter 還可以用來計(jì)算一階、二階和三階導(dǎo)數(shù),通過order參數(shù)來指定,order可取以下值的組合:

0: 表示使用高斯核做卷積

1: 使用一階高斯導(dǎo)數(shù)

2: 使用二階導(dǎo)數(shù)

3: 使用三階導(dǎo)數(shù)

比如order = (1,0)表示對(duì)輸入數(shù)據(jù)的每一維,先用1階導(dǎo)數(shù)做卷積,然后再與高斯核做卷積。

scipy.ndimage除了高斯濾波器,還提供了Prewitt和Sobel濾波器,下面我們將使用這三種方法來生成邊緣增強(qiáng)圖像:

from PIL import Image
import numpy as np
from scipy.ndimage import filters
import matplotlib.pyplot as plt

im = np.array(Image.open("Valve_original.png").convert("L"))

#prewitt
pwimx = np.zeros(im.shape)
filters.prewitt(im, 1, pwimx)
pwimy = np.zeros(im.shape)
filters.prewitt(im, 0, pwimy)
pwmagnitude = np.sqrt(pwimx ** 2 + pwimy ** 2) #計(jì)算兩個(gè)向量的模,同:np.hypot(pwimx, pwimy)

#sobel
sbimx = np.zeros(im.shape)
filters.sobel(im, 1, sbimx)
sbimy = np.zeros(im.shape)
filters.sobel(im, 0, sbimy)
sbmagnitude = np.sqrt(sbimx ** 2 + sbimy ** 2)

#gaussian
gsimx = np.zeros(im.shape)
filters.gaussian_filter(input = im, sigma = 1, order = (0,1), output = gsimx)
gsimy = np.zeros(im.shape)
filters.gaussian_filter(input = im, sigma = 1, order = (1,0), output = gsimy)
gsmagnitude = np.sqrt(gsimx ** 2 + gsimy ** 2)

plt.gray()

index = 221
plt.subplot(index)
plt.imshow(im)
plt.title("original")
plt.axis("off")

plt.subplot(index + 1)
plt.imshow(pwmagnitude)
plt.title("prewitt")
plt.axis("off")

plt.subplot(index + 2)
plt.imshow(sbmagnitude)
plt.title("sobel")
plt.axis("off")

plt.subplot(index + 3)
plt.imshow(gsmagnitude)
plt.title("gaussian")
plt.axis("off")

plt.show()

效果圖如下:

光從上面效果圖很難看出Prewitt和Sobel的區(qū)別,也許他們?cè)谠肼暣蟮膱D像上才能顯出區(qū)別。

Canny算子

Canny是目前定義最嚴(yán)謹(jǐn)?shù)倪吘墮z測(cè)算法,用Cannel計(jì)算出的邊緣很細(xì)小,連接性好,有一定的抗噪作用,同時(shí)具有精準(zhǔn)的邊緣定位。它的計(jì)算過程相比以上介紹的方法復(fù)雜:

先使用高斯濾波平滑圖像,去除一些噪聲,同時(shí),一些極細(xì)小的邊緣也會(huì)丟掉。

計(jì)算圖像的亮度變化梯度

運(yùn)用非極大值抑制(non-maximum suppression)(一種邊緣細(xì)化技術(shù))減小梯度變化幅度

使用雙閾值檢測(cè)邊緣

邊緣連接檢測(cè)

下面這張圖是從維基找到的,我們可以看到邊緣效果比上面的要細(xì)得多:

在scipy.ndimage里面,沒有提供Canny濾波器,但有一個(gè)圖像處理庫叫scikit-image(簡稱skimage)有提供Canny函數(shù)和示例。

以上介紹的是一階微分算子,以下是二階微分算子:

Laplacian算子

Laplacian算子是基于二階微分的邊緣檢測(cè),二階微分相比一階微分產(chǎn)生的邊緣更細(xì),因二階微分處理對(duì)細(xì)節(jié)有較強(qiáng)的響應(yīng),所以應(yīng)用Laplacian產(chǎn)生的邊緣增強(qiáng)圖像保留了原圖像較多的背景細(xì)節(jié)。
所以,Laplacian算子也可用于圖像銳化處理和斑點(diǎn)檢測(cè)。

LoG(也叫 Marr-Hildreth )算子

這是一種把高斯濾波和Laplacian二階導(dǎo)數(shù)結(jié)合起來的算子。值得一提的是上面介紹的Canny算法也是參考了LoG,在邊緣檢測(cè)之前,先對(duì)原圖像應(yīng)用高斯濾波來平滑圖像。

其他

邊緣檢測(cè)算法主要是基于圖像強(qiáng)度的一階和二階導(dǎo)數(shù),但導(dǎo)數(shù)的計(jì)算對(duì)噪聲很敏感,因此必須使用濾波器來改善與噪聲有關(guān)的邊緣檢測(cè)器的性能。需要指出,大多數(shù)濾波器在降低噪聲的同時(shí)也導(dǎo)致了細(xì)小邊緣的丟失,目前也存在一種叫各向異性擴(kuò)散的平滑技術(shù),使得平滑不在邊緣上作用,因此,使用時(shí)需要折中選擇。

另外,計(jì)算出像素的亮度導(dǎo)數(shù)之后,下一步要做的就是給出一個(gè)閾值來確定哪里是邊緣位置。閾值越低,能夠檢測(cè)出的邊線越多,結(jié)果也就越容易受到圖片噪聲的影響。與此相反,一個(gè)高的閾值將會(huì)遺失細(xì)的或者短的邊緣線段。所以,閾值的選取與實(shí)際的應(yīng)用結(jié)合起來考慮會(huì)讓檢測(cè)結(jié)果更好。目前,也有根據(jù)背景自動(dòng)計(jì)算閾值的算法。

小結(jié)

下一節(jié)介紹圖像處理的形態(tài)學(xué)基本運(yùn)算。
你還可以查看其它筆記。

參數(shù)資料

圖像處理常用邊緣檢測(cè)算子總結(jié)

A Comparison of various Edge Detection Techniques used in Image Processing

Image Filtering & Edge Detection

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/44198.html

相關(guān)文章

  • SegmentFault 技術(shù)周刊 Vol.30 - 學(xué)習(xí) Python 來做一些神奇好玩的事情吧

    摘要:學(xué)習(xí)筆記七數(shù)學(xué)形態(tài)學(xué)關(guān)注的是圖像中的形狀,它提供了一些方法用于檢測(cè)形狀和改變形狀。學(xué)習(xí)筆記十一尺度不變特征變換,簡稱是圖像局部特征提取的現(xiàn)代方法基于區(qū)域圖像塊的分析。本文的目的是簡明扼要地說明的編碼機(jī)制,并給出一些建議。 showImg(https://segmentfault.com/img/bVRJbz?w=900&h=385); 前言 開始之前,我們先來看這樣一個(gè)提問: pyth...

    lifesimple 評(píng)論0 收藏0
  • Programming Computer Vision with Python學(xué)習(xí)筆記一)

    摘要:接下來的學(xué)習(xí)筆記本人都將使用來代替。庫中提供的很多圖像操作都是分別作用于某個(gè)通道的數(shù)據(jù)。是最流行的開源色彩管理庫之一。目前只支持在增加和。模塊支持從圖像對(duì)象創(chuàng)建或的對(duì)象,方便被使用和顯示。模塊對(duì)圖像或指定區(qū)域的每個(gè)通道進(jìn)行統(tǒng)計(jì),包括等。 介紹 《Programming Computer Vision with Python》是一本介紹計(jì)算機(jī)視覺底層基本理論和算法的入門書,通過這本收可以...

    huashiou 評(píng)論0 收藏0
  • Programming Computer Vision with Python學(xué)習(xí)筆記五)

    摘要:下面是二維空間的高斯分布函數(shù)公式這個(gè)公式被稱作高斯核。高斯模糊使用高斯平均算子來實(shí)現(xiàn)的圖像模糊叫高斯模糊,也叫高斯平滑被認(rèn)為是一種最優(yōu)的圖像平滑處理。 SciPy庫 SciPy庫,與之前我們使用的NumPy和Matplotlib,都是scipy.org提供的用于科學(xué)計(jì)算方面的核心庫。相對(duì)NumPy,SciPy庫提供了面向更高層應(yīng)用的算法和函數(shù)(其實(shí)也是基于NumPy實(shí)現(xiàn)的),并以子模塊...

    Rocko 評(píng)論0 收藏0
  • Programming Computer Vision with Python學(xué)習(xí)筆記八)

    摘要:簡稱庫是從擴(kuò)展下來的,提供了更豐富的圖像處理函數(shù),去噪函數(shù)除了還有算法,比如邊緣檢測(cè)還有以前簡單提過的算子濾波器。下面我用看具體的例子,將和高斯平滑進(jìn)行對(duì)比效果對(duì)比如下明顯感覺使用的效果要比高斯平滑好很多。 圖像去噪(Image Denoising)的過程就是將噪點(diǎn)從圖像中去除的同時(shí)盡可能的保留原圖像的細(xì)節(jié)和結(jié)構(gòu)。這里講的去噪跟前面筆記提過的去噪不一樣,這里是指高級(jí)去噪技術(shù),前面提過的...

    FleyX 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<