天天看點

opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv

opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv

start

opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv

計算機視覺

  計算機視覺資訊的處理技術主要依賴于圖像處理方法,經過處理後輸出圖像的品質得到相當程度的改善,既改善了圖像的視覺效果,又便于計算機對圖像進行分析、處理和識别。

opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv

01

♡♡♡

當我們使用Photoshop等圖像編輯器打開圖像,無限放大圖像,用放大鏡方式檢視圖像時,會看到很多彩色的小方格(針對彩色圖而言)。其實這其中的每一個彩色的方格都是由三個數值量化的,或者說是由一個具有三個元素的向量量化的。灰階圖像的每一個像素都是由一個數字量化的,而彩色圖像的每一個像素都是由三個數字組成的向量量化的。最常用的是由R、G、B三個分量來量化的,RGB模型使用加性色彩混合以獲知需要發出什麼樣的光來産生給定的色彩,源于使用陰極射線管(CRT)的彩色電視,具體色彩的值用三個元素的向量來表示,這三個元素的數值分别代表三種基色:Red、Green、Blue的亮度。假設每種基色的數值量化成個數,就如同8位灰階圖像一樣,灰階量化成個數。RGB圖像的紅、綠、藍三個通道的圖像都是一張8位圖,是以顔色的總數為,如(0,0,0)代表黑色,(255,255,255)代表白色,(255,0,0)代表紅色。

是以計算機“看到”的圖像或者圖像在計算機内部表現形式是數字矩陣,簡單來說,彩色圖在每個像素上有三個值,而灰階圖隻有一個值。

我們習慣的坐标表示是先 x 橫坐标,再 y 縱坐标。在圖像進行中,這種慣性思維尤其需要擔心。因為在計算機中,圖像是以矩陣的形式儲存的,先行後列。是以,一張 寬×高×顔色 通道=480×256×3 的圖檔會儲存在一個 256×480×3 的三維張量中。圖像處理時也是按照這種思想進行計算的(其中就包括 OpenCV 下的圖像處理),即 高×寬×顔色通道。

  但是問題來了,cv2.resize這個api卻是個小例外。因為它的參數輸入卻是 寬×高×顔色通道。

opencv中的image的shape屬性是=高*寬*通道,而cv.resize操作卻是輸入為(寬*高),這裡尤為要注意。

opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv

02

♡♡♡

處理圖像主要步驟

 1.圖像增強 

  圖像的增強用于調整圖像的對比度,突出圖像中的重要細節,改善視覺品質。通常采用灰階直方圖修改技術進行圖像增強。圖像的灰階直方圖是表示一幅圖像灰階分布情況的統計特性圖表,與對比度緊密相連。

灰階圖跟彩色圖不一樣,灰階圖每一個方格代表圖像的一個像素。那麼針對圖像的基本資訊,如何解讀其中的寬度、高度和位深度呢?灰階圖所對應的數字矩陣中,水準方向上的方格數對應其基本資訊中的“寬度”,垂直方向上的方格數對應其基本資訊中的“高度”,而計算機會将每一個像素數字化為一個數值,灰階圖的”位深度“是8bit(彩色是24位),代表将每一個方格數字化為[0,255]之間的uchar類型數字,即用256個數字來衡量灰階的深淺,值越大,代表越亮,值越小,代表越灰,255代表白色,0代表黑色。是以,将上述彩色圖灰階化以後,計算機看到的是一個二維數字矩陣。opencv中的cvtColor函數實作BGR彩色空間的圖像向灰階圖像和其他顔色空間轉換,并且,在opencv中,實作将彩色圖像(一個向量)轉化為灰階像素(一個數值)的公式如下:

opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv

為什麼要将彩色灰階處理,當然是為了後續的處理啦。既然是處理圖像,我們當然要保證輸入圖像的大小不能太大啦!

OpenCV自帶的cv2.resize()函數可以實作放大與縮小,函數聲明如下:cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]);

其參數解釋如下:src 輸入圖像矩陣、dsize 二進制元祖(寬,高)、即輸出圖像的大小、dst 輸出圖像矩陣、fx 在水準方向上縮放比例,預設值為0、fy 在垂直方向上縮放比例,預設值為0。

opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv

03

♡♡♡

3.圖像平滑

  圖像的平滑處理技術即圖像的去噪聲處理,主要是為了去除實際成像過程中因成像裝置和環境所造成的圖像失真,提取有用資訊,去除噪聲,恢複原始圖像是圖像進行中的一個重要内容。圖像降噪其實指每一副圖像都包含某種程度的噪聲,噪聲可以了解為由一種或者多種原因造成的灰階值的随機變化,如由光子通量的随機性造成的噪聲等,在大多數情況下,需要平滑技術(也常稱為濾波或者降噪技術)進行抑制或者去除。比較常用的平滑處理算法包括基于二維離散卷積的高斯平滑、均值平滑、基于統計學方法的中值平滑,以及具備保持邊緣作用的平滑算法的雙邊濾波、導向濾波等。

opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv

04

♡♡♡

4.圖像分割

  圖像分割是将圖像分成若幹部分,每一部分對應于某一物體表面,在進行分割時,每一部分的灰階或紋理符合某一種均勻測度度量。其本質是将像素進行分類,分類的依據是像素的灰階值、顔色、頻譜特性、空間特性或紋理特性等。

圖像的分割是為了目标的定位,目前定位的方法很多,但總的來說可以分為以下4類:

(1)基于顔色的分割方法,這種方法主要利用顔色空間的資訊,實作車牌分割,包括彩色邊緣算法、顔色距離和相似度算法等;

(2)基于紋理的分割方法,這種方法主要利用車牌區域水準方向的紋理特征進行分割,包括小波紋理、水準梯度差分紋理等;

(3)基于邊緣檢測的分割方法;

最普遍的是基于canny算子做邊緣檢測。

Canny邊緣檢測算子的方向性質保證了很好的邊緣強度估計,而且能同時産生邊緣梯度方向和強度兩個資訊,即能在一定程度上抗噪聲又能保持弱邊緣。

Canny算法步驟:

(1)去噪

任何邊緣檢測算法都不可能在未經處理的原始資料上很好地處理,是以第一步是對原始資料與高斯 mask 作卷積,得到的圖像與原始圖像相比有些輕微的模糊(blurred)。這樣,單獨的一個像素雜訊在經過高斯平滑的圖像上變得幾乎沒有影響。

(2)用一階偏導的有限差分來計算梯度的幅值和方向。

(3)對梯度幅值進行非極大值抑制。

僅僅得到全局的梯度并不足以确定邊緣,是以為确定邊緣,必須保留局部梯度最大的點,而抑制非極大值。非極大值抑制産生的二值灰階矩陣的潛在點中按照高門檻值尋找邊緣,并以所找到的點為中心尋找鄰域内滿足低門檻值的點,進而形成一個閉合的輪廓。然後對于不滿足條件的點直接删除掉。

主要是利用水準投影方法和垂直投影方法進行目标定位。

(4)基于數學形态法的分割方法。

4.1形态學處理

完成了高斯去噪以後,為了後面更加準确的提取車牌的輪廓,我們需要對圖像進行形态學處理。

erode操作也就是腐蝕操作,類似于卷積,也是一種鄰域運算,但計算的不是權重求和,而是對鄰域中的像素點按灰階值進行排序,然後選擇該組的最小值作為輸出的灰階值。具體過程就是:輸入圖像的高、寬,對于圖像中的任意位置,取以為中心、高為、寬為的鄰域,其中和均為奇數,對鄰域中的像素點灰階值進行排序,然後去最小值,作為輸出圖像的位置處的灰階值。

dilate操作就是膨脹操作,與腐蝕操作類似,膨脹是取每一個位置鄰域内的最大值。既然是取鄰域内的最大值,那麼顯然膨脹後的輸出圖像的總體亮度的平均值比起原圖會有所上升,而圖像中較亮物體的尺寸會變大;相反,較暗物體的尺寸會減小,甚至消失。

4.2門檻值分割 

完成初步的形态學處理以後,我們需要對圖像進行門檻值分割,對圖像進行數字處理時,我們需要把圖像分成若幹個特定的、具有獨特性質的區域,每一個區域代表一個像素的集合,每一個集合又代表一個物體,而完成該過程的技術通常稱為圖像分割,它是從圖像處理到圖像分析的關鍵步驟。。我們通過門檻值處理,就是希望能夠從背景中分離出我們的研究對象。

最後關于 圖像編碼和傳輸 和 圖像識别 下周接着分享。

簡單先說一下圖像編碼和傳輸:

  數字圖像的資料量是相當龐大的,高信道速率意味着高投資,也意味着普及難度增加。是以,傳輸過程中,對圖像資料進行壓縮顯得非常重要。圖像資料的壓縮主要通過圖像資料的編碼和變換壓縮完成。

圖像識别:

  圖像的識别過程實際上可以看作是一個标記過程,即利用識别算法來辨識景物中已分割好的各個物體,給這些物體賦予特定的标記,它是機器視覺系統必須完成的一個任務。目前用于圖像識别的方法主要分為決策理論和結構方法。

小編推薦HOT

opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv
視覺+機器人,如何實作連接配接器的自動裝配? 
opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv

opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv

機器視覺在制造業應用的10個案例  

opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv

opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv
機器視覺技術發展的五大趨勢  
opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv

opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv
搞懂機器視覺基本内容,這份PPT就夠了! 
opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv

opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv

機器視覺系統內建發展的現狀和前景  

opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv
opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv

2019年光技術發展的十大趨勢  

opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv
opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv

機器視覺:PC式視覺系統與嵌入式視覺系統差別  

opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv
opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv

 幹貨:變成計算機視覺大師,需要經曆的幾個階段   

opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv
opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv

 計算機視覺和圖像處理之間有什麼差別? 

opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv
opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv

 基于HALCON的機器視覺開發,C++或C#如何選擇? 

opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv
opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv

 End 

opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv

商務合作:QQ:1504328545

聲明:部分内容來源于網絡,僅供讀者學習、交流之目的。文章版權歸原作者所有。如有不妥,請聯系删除。

更多是視覺資訊盡在“新機器視覺”微信公衆号~

opencv 輪廓放大_分享計算機視覺之圖像處理Python之opencv

繼續閱讀