計算機視覺算法:基于OpenCV的計算機應用開發》 —3.4.4 數學函數

      網友投稿 1019 2022-05-30

      3.4.4 數學函數

      跟本章前面的內容不同,本節將要學習的數學計算函數和算法都不是基于元素的。它們包括簡單函數,例如均值、求和,以及更復雜的運算,例如離散傅里葉變換。讓我們通過實例瀏覽一些最重要的內容。

      3.4.4.1 矩陣求逆

      invert函數可用于計算矩陣的逆。不要與bitwise_not函數混淆,bitwise_not會反轉圖像像素中的每一位。invert 函數不是基于元素的函數,需要提供反轉方法作為該函數的參數。見下例:

      枚舉DecompTypes包含可在invert 函數中用作為分解類型的所有條目。具體如下:

      如果你對每種分解方法的詳細描述感興趣,請參閱OpenCV文檔以獲取Decomp

      Types枚舉的說明。

      3.4.4.2 元素的平均值及求和

      你可以使用mean函數計算矩陣中元素的平均值。下面的例子顯示如何讀取圖像、計算并顯示其所有通道的平均值:

      你可以用完全相同的方式使用sum函數來計算矩陣中元素的總和:

      OpenCV中還有一個meanStdDev函數,用于同時計算矩陣中所有元素的平均值和標準差。下面是一個例子:

      與mean函數類似,meanStdDev函數也分別計算每個通道的結果。

      3.4.4.3 離散傅里葉變換

      一維或二維數組(二維數組即圖像)的離散傅里葉變換,是在計算機視覺中分析圖像的眾多方式之一。結果的解釋完全取決于使用它的領域,這不是本書中的重點,但我們將在本節中學習如何進行離散傅里葉變換。

      簡單地說,你可以使用dft函數來計算圖像的傅里葉變換。但是,在安全地調用dft功能之前,需要做一些準備工作,這同樣適用于傅里葉變換的結果。讓我們用一個示例代碼并通過計算和顯示之前使用過的示例圖像的傅里葉變換,來理解這個問題。

      dft函數可以更有效地處理某些尺寸的矩陣(2的冪,例如2、4和8),這就是為什么在調用dft函數之前,最好將矩陣的尺寸增加到最接近的2的冪并用零填充它。這樣可以使用getOptimalDFTSize函數來完成。假設我們想要計算輸入圖像的離散傅里葉變換,可以編寫如下代碼來計算并調整其大小為dft函數的最佳大小:

      如你所見,對于行和列,必須分別調用getOptimalDFTSize函數。現在,你應該已經熟悉了copyMakeBorder函數。調整圖像大小并用零(或其他值)填充新像素是copyMakeBorder函數的無數用法之一。

      剩下的很簡單,我們需要形成一個雙通道圖像并將其傳遞給dft函數,并在同一個矩陣中得到復數結果(實部和虛部)。這將簡化顯示結果的過程。代碼如下:

      我們學過如何使用merge函數。在前面的代碼中唯一需要注意的地方是結果與輸入保存在同一圖像中。complexImage現在包含兩個通道,分別是離散傅里葉變換結果的實部和虛部。就是這樣!我們現在得到結果了,但是為了能夠顯示它,我們必須計算結果的幅值。代碼如下:

      在前面的代碼中,我們將復雜的結果拆分為通道,然后使用magnitude函數計算了其幅度。從理論上講,mag是一個可顯示的結果,但實際上,它的值遠遠高于OpenCV可以顯示的范圍,因此我們需要在顯示它之前執行幾次轉換。首先,我們需要通過執行以下轉換來確保結果采用對數量度:

      接下來,我們必須確保將結果值縮放并標準化以使其介于0.0~1.0之間,以便通過OpenCV中的imshow函數顯示。因此,你需要使用normalize函數:

      現在你可以嘗試使用imshow函數顯示結果了。下面是顯示離散傅里葉變換結果的示例:

      該結果的問題在于,在結果的原點位于圖像的中心之前,需要交換象限。下圖描繪了在結果的中心位置之前,必須如何交換結果的四個象限:

      以下是交換傅里葉變換結果的四個象限所需的代碼:首先找到結果的中心,然后創建四個感興趣區域(ROI)矩陣,然后交換它們:

      dft函數接受一個附加參數用于進一步自定義其行為,此參數可以是DftFlags枚舉值的組合。例如,要執行傅里葉變換的逆變換,需要在調用dft函數時使用DFT_INVERSE參數:

      這也可以通過idft函數來完成:

      請查看DftFlags枚舉和dft函數文檔,以獲取有關如何在OpenCV中實現離散傅里葉變換的更多信息。

      3.4.4.4 生成隨機數

      隨機數生成是計算機視覺中使用最廣泛的算法之一,尤其是在用給定范圍的隨機數測試現有算法時。使用OpenCV庫時,可以使用以下函數生成隨機數或隨機數矩陣:

      randn函數可以用來生成具有給定平均值和標準差的隨機數矩陣或數組。以下是此函數的使用方法:

      《計算機視覺算法:基于OpenCV的計算機應用開發》 —3.4.4 數學函數

      randu函數類似于randn函數,使用隨機數填充數組,但是,此函數使用上限和下限(包括兩者)來生成隨機值,而不是均值和標準差。下面是一個例子:

      randShuffle函數,從函數名就能猜出,可用于隨機重組數組或矩陣的元素。它的用法很簡單,見下例:

      OpenCV

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:性能測試入門01
      下一篇:華為軟件開發云使用分享:秒殺現有研發團隊協作工具
      相關文章
      亚洲综合一区无码精品| 亚洲AV无码一区二区一二区| xvideos亚洲永久网址| 亚洲人成日本在线观看| 久久久无码精品亚洲日韩蜜臀浪潮 | 亚洲精品成人无码中文毛片不卡 | 亚洲美女视频网站| 亚洲第一成年网站大全亚洲| 亚洲激情黄色小说| 亚洲av专区无码观看精品天堂| 亚洲国产精品成人综合色在线婷婷 | 亚洲人成影院在线无码按摩店| 亚洲色精品88色婷婷七月丁香| 国产偷v国产偷v亚洲高清| 亚洲av午夜福利精品一区人妖| 亚洲av中文无码乱人伦在线r▽| 亚洲AV无码1区2区久久| 久久久久亚洲av无码专区| 亚洲国产精品乱码在线观看97| 亚洲无圣光一区二区| 亚洲香蕉在线观看| 亚洲av无码专区在线电影天堂| MM1313亚洲精品无码久久| 亚洲第一页综合图片自拍| 在线观看国产区亚洲一区成人| 亚洲色大成网站WWW久久九九| 亚洲bt加勒比一区二区| 亚洲成人动漫在线观看| 亚洲情A成黄在线观看动漫软件| 亚洲av日韩av永久无码电影| 亚洲情侣偷拍精品| 亚洲精品国产精品乱码视色 | 亚洲日韩在线中文字幕综合| 亚洲av无码天堂一区二区三区| 亚洲综合区小说区激情区| 久久亚洲精品无码| 亚洲剧场午夜在线观看| 亚洲heyzo专区无码综合| 国产精品亚洲mnbav网站| 亚洲av无码成人黄网站在线观看 | 亚洲日本在线观看视频|