图像水平梯度和竖直梯度代码_Opencv图像处理(三)
曉強Deep Learning的讀書分享會,先從這里開始,從大學開始。大家好,我是曉強,計算機科學與技術專業研究生在讀。我會不定時的更新我的文章,內容可能包括深度學習入門知識,具體包括CV,NLP方向的基礎知識和學習的論文;網絡表征學習的相關論文解讀。當然我每天的讀書心得也會分享給大家,可能涉及我們生活各個方面的書籍。我也會不定時回答大家的問題與大家一同進步,共同交流,互相監督,結交更多的朋友。希望大家多留言,多交流,多多關照。
【曉白】今天終于有時間整理以后寫一篇技術類文章啦,以后我會不定期更文章,先從計算機視覺開始,逐步更新多個深度學習應用領域的知識點,如有錯誤大家多指正,多交流,多討論,共同學習,互相進步。如果內容對大家有一些幫助,請大家多點贊支持,分享。接下來我們來分享第三課時。系列課程請關注我的文章鏈接。
第三課:圖像分割
圖像分割:圖像分割是指將圖像分成若干具有相似性質的區域的過程,主要有基于閾值、基于區域、基于邊緣、基于聚類、基于圖論和基于深度學習的圖像分割方法等。圖像分割分為語義分割和實例分割。
分割的原則就是使劃分后的子圖在內部保持相似度最大,而子圖之間的相似度保持最小。將G = (V,E) 分成兩個子集A,B,使得:
固定閾值圖像分割:
直方圖雙峰法:雙峰法:六十年代中期提出的直方圖雙峰法 (也稱 mode 法) 是典型的全局單閾值分割方法。基本思想:假設圖像中有明顯的目標和背景, 則其灰度直方圖呈雙峰分布,當灰度級直方 圖具有雙峰特性時,選取兩峰之間的谷對應 的灰度級作為閾值。
固定閾值分割:
? 函數:cv2.threshold(src, thresh, maxval, type)
? 參數說明:
參數1:原圖像
參數2:對像素值進行分類的閾值
參數3:當像素值高于(小于)閾值時,應該被賦予的新的像素值,
參數4:第四個參數是閾值方法。
返回值:函數有兩個返回值,一個為retVal, 一個閾值化處理之后的圖像。
自動閾值圖像分割:
自適應閾值法:
函數:cv2.adaptiveThreshold()
迭代法閾值分割:
步驟
1. 求出圖象的最大灰度值和最小灰度值,分別記為ZMAX和ZMIN,令初始閾值
T0=(ZMAX+ZMIN)/2;
2. 根據閾值TK將圖象分割為前景和背景,分別求出兩者的平均灰度值ZO和ZB ;
3. 求出新閾值TK+1=(ZO+ZB)/2;
4. 若TK==TK+1,則所得即為閾值;否則轉2,迭代計算;
5 . 使用計算后的閾值進行固定閾值分割。
Otsu大津法:
? 最大類間方差法,1979年日本學者大津提出,是一種基于全局閾值的自適應方法。
? 灰度特性:圖像分為前景和背景。當取最 佳閾值時,兩部分之間的差別應該是最大的,衡量差別的標準為最大類間方差。
? 直方圖有兩個峰值的圖像,大津法求得的 T近似等于兩個峰值之間的低谷。
圖像邊緣提取:
圖像梯度:
梯度:梯度是一個向量,梯度方向指向函數變化最快的方向,大小就是它的模,也是最大的變化率, 對于二元函數z=f(x,y),它在點(x,y)的梯度就是
, 或者 :
這個梯度向量的幅度和方向角為:
圖像梯度:
圖像梯度即圖像中灰度變化的度量,求圖像梯度的過程是二維離散函數求導過程。邊緣其實就是圖像上灰度級變化很快的點的集合。下圖展示了一個灰度圖的數學化表達,像素點(x,y)的灰度值是f(x,y),它有八個鄰域。
圖像在點(x,y)的梯度為:
模板卷積:要理解梯度圖的生成,就要先了解模板卷積的過程,模板 卷積是模板運算的一種方式,其步驟如下:
(1)將模板在輸入圖像中漫游,并將模板中心與圖像中 某個像素位置重合;
(2)將模板上各個系數與模板下各對應像素的灰度相乘;
(3)將所有乘積相加(為保持灰度范圍,常將結果再除 以模板系數之和,后面梯度算子模板和為0的話就不需要 除了);
(4)將上述運算結果(模板的響應輸出)賦給輸出圖像 中對應模板中心位置的像素。
梯度圖:梯度圖的生成和模板卷積相同,不同的是要生成梯 度圖,還需要在模板卷積完成后計算在點(x,y)梯度 的幅值,將幅值作為像素值,這樣才算完。
注意:梯度圖上每個像素點的灰度值就是梯度向量 的幅度
生成梯度圖需要模板,右圖為水平和豎直方向最簡 單的模板。
簡單的水平模板梯度豎直模板梯度梯度算子:梯度算子是一階導數算子,是水平G(x)和豎直G(y)方向對應模板的組合,也 有對角線方向。 常見的一階算子: Roberts交叉算子,Prewitt算子,Sobel算子
Roberts交叉算子:
Roberts交叉算子其本質是一個對角線方向的梯度算子,對應的水平方向和豎直方向的梯度分別為:
優點:邊緣定位較準,適用于邊緣明顯且噪聲較少的圖像。
缺點:
(1)沒有描述水平和豎直方向的灰度變化,只關注了對角線方向,容易造成遺漏。
(2)魯棒性差。由于點本身參加了梯度計算,不能有效的抑制噪聲的干擾。
Prewitt算子:
Prewitt算子是典型的3*3模板,其模板中心對應要求梯度的原圖像坐標(x,y),(x,y)對應的8-鄰域的像 素灰度值如下表所示:
Prewitt算子:
Sobel算子:
Sobel算子其實就是是增加了權重系數的Prewitt算子,其模板中心對應要求梯度的原圖像坐標,對應 的8-鄰域的像素灰度值如下表所示:
函數:
dst = cv2.Sobel(src, ddepth, dx, dy,ksize)
參數說明:
參數1:需要處理的圖像;
參數2:圖像的深度,-1表示采用的是與原圖像相同的
深度。目標圖像的深度必須大于等于原圖像的深度;
參數3,4:dx和dy表示的是求導的階數,0表示這個方 向上沒有求導,一般為0、1、2;
參數5:ksize是Sobel算子的大小,必須為1、3、5、7。
Canny邊緣檢測算法:
Canny算子是先平滑后求導數的方法。John Canny研究了最優邊緣檢測方法所需的
特性,給出了評價邊緣檢測性能優劣的三個指標:
1 好的信噪比,即將非邊緣點判定為邊緣點的概率要低,將邊緣點判為非邊緣點的概 率要低;
2 高的定位性能,即檢測出的邊緣點要盡可能在實際邊緣的中心;
3 對單一邊緣僅有唯一響應,即單個邊緣產生多個響應的概率要低,并且虛假響應邊 緣應該得到最大抑制。
函數:cv2.Canny(image, th1, th2,Size)
image:源圖像
th1:閾值1
th2:閾值2
Size:可選參數,Sobel算子的大小
步驟:
1. 彩色圖像轉換為灰度圖像(以灰度圖單通道圖讀入)
2. 對圖像進行高斯模糊(去噪)
3. 計算圖像梯度,根據梯度計算圖像邊緣幅值與角度
4. 沿梯度方向進行非極大值抑制(邊緣細化)
5. 雙閾值邊緣連接處理
6. 二值化圖像輸出結果
連通區域分析算法:連通區域(Connected Component)一般是指圖像中具有相同像素值且位置相鄰的 前景像素點組成的圖像區域,連通區域分析是指將圖像中的各個連通區域找出并標記。 連通區域分析是一種在CV和圖像分析處理的眾多應用領域中較為常用和基本的方法。 例如:OCR識別中字符分割提取(車牌識別、文本識別、字幕識別等)、視覺跟蹤中的運動前景 目標分割與提取(行人入侵檢測、遺留物體檢測、基于視覺的車輛檢測與跟蹤等)、醫學圖像處 理(感興趣目標區域提取)等。 在需要將前景目標提取出來以便后續進行處理的應用場景中都能夠用到連通區域分析 方法,通常連通區域分析處理的對象是一張二值化后的圖像。在圖像中,最小的單位是像素,每個像素周圍有鄰接像素,常見的鄰接關系有2種:4鄰接與8鄰接。
如果A與B連通,B與C連通,則A與C連通,在視覺上看來,彼此連通的點形成了一個區域,而不連 通的點形成了不同的區域。這樣的一個所有的點彼此連通點構成的集合,我們稱為一個連通區域。
Two-Pass 算法:兩遍掃描法( Two-Pass ),正如其名,指的就是通過掃 描兩遍圖像,將圖像中存在的所有連通域找出并標記。
第一次掃描:
? 從左上角開始遍歷像素點,找到第一個像素為255的點, label=1;
? 當該像素的左鄰像素和上鄰像素為無效值時,給該像素 置一個新的label值,label ++,記錄集合;
? 當該像素的左鄰像素或者上鄰像素有一個為有效值時, 將有效值像素的label賦給該像素的label值;
? 當該像素的左鄰像素和上鄰像素都為有效值時,選取 其中較小的label值賦給該像素的label值
第二次掃描:
? 對每個點的label進行更新,更新為其對于其集合中最小 的label
區域生長算法:區域生長是一種串行區域分割的圖像分割方法。區域生長是指從某個像素出發,按照一定的準則, 逐步加入鄰近像素,當滿足一定的條件時,區域生長終止。
區域生長的好壞決定于
? 初始點(種子點)的選取。
? 生長準則。
? 終止條件。
區域生長是從某個或者某些像素點出發,最后得到整個區域,進而實現目標的提取。
基本思想:將具有相似性質的像素集合起來構成區域。
步驟:1. 對圖像順序掃描,找到第1個還沒有歸屬的像素, 設該像素 為(x0, y0);
2. 以(x0, y0)為中心, 考慮(x0, y0)的4鄰域像素(x, y)如果(x0, y0)滿足生長準則, 將(x, y)與(x0, y0)合并(在同一區域內), 同時將(x, y)壓入堆棧;
區域生長原理:
? 從堆棧中取出一個像素, 把它當作(x0, y0)返回到步驟2;
? 當堆棧為空時,返回到步驟1;
? 重復步驟1 - 4直到圖像中的每個點都有歸屬時;
? 生長結束。
分水嶺算法:任意的灰度圖像可以被看做是地質學表面,高亮度的地方是山峰,低亮度的地方是山谷。
給每個孤立的山谷(局部最小值)不同顏色的水(標簽),當水漲起來,根據周圍的山峰(梯度), 不同的山谷也就是不同的顏色會開始合并,要避免山谷合并,需要在水要合并的地方建立分水嶺, 直到所有山峰都被淹沒,所創建的分水嶺就是分割邊界線,這個就是分水嶺的原理。
步驟
1. 將白色背景編程黑色背景 - 目的是為了后面變的變換做準備
2. 使用filter2D與拉普拉斯算子實現圖像對比度的提高
3. 轉為二值圖像4. 距離變換
5. 對距離變換結果進行歸一化[0-1]之間
6. 使用閾值,在此二值化,得到標記
7. 腐蝕每個peak erode
8. 發現輪廓 findContours
9. 繪制輪廓 drawContours
10.分水嶺變換 watershed
11.對每個分割區域著色輸出結果
【曉議】今天外面陰雨連綿,技術文章更新完畢,每一部分的代碼講解,請關注我之后私信我,我會發給大家。您如果在計算機入門時或者想轉行學習計算專業的知識,有什么問題也可以一起討論解決。謝謝大家的關注和分享。如果對您有幫助,請幫我點贊。謝謝。
曉強DL:OpenCV圖像處理?zhuanlan.zhihu.com曉強DL:Opencv圖像處理?zhuanlan.zhihu.com 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的图像水平梯度和竖直梯度代码_Opencv图像处理(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql窗口函数_MySQL8.0窗口
- 下一篇: 优启通怎么重装系统win10_重装系统失