周緒達
(重慶市朝陽中學,重慶 400700)
蒙特卡洛方法是一種以統計抽樣理論為基礎,以計算機為手段,通過有關隨機變量的統計抽樣檢驗或隨機模擬,從而估計和描述函數的統計量、求解問題近似解的一種數值計算方法[1]。該方法既可以解決隨機性問題,又可以解決確定性問題,其處理實際問題的基本步驟是:構造概型,定義隨機變量,通過模擬獲得子樣,統計計算。由于蒙特卡洛模擬方法具有程序結構簡單、模擬過程靈活、不受問題條件限制、適于求解多維問題等優點,因而被廣泛應用。本文使用Python語言實現了一種基于蒙特卡洛方法的求取不規則圖形的算法。
在圖1所示的不規則圖形中,其面積無法使用常規的幾何圖形面積計算公式進行計算。但是仔細觀察圖形可以發現,該不規則圖形有較為明顯的邊界,且圖形內部的顏色與外部顏色有著較大的差異,這兩種因素使得圖形內部與外部有明顯界限,這是使用蒙特卡洛方法計算不規則圖形面積的前提。當圖像不符合以上前提時,需要使用圖像處理工具對其進行處理,使得圖像中的不規則圖形具有較為明顯的邊緣,并且圖形內部與圖像其他部分具有對比度較為強烈的顏色。

圖1 不規則圖形示例
蒙特卡洛方法計算圖形面積是基于以下原理:當向整幅圖像中撒入一些隨機點時,一部分點會落入圖形內部,另外一部分點則落入圖形之外。當撒入點符合均勻隨機分布時,落入不規則圖形內部的點的數量,與不規則圖形所占據的整幅圖像大小的比例成正比。
假設撒入的點數總數量為count(圖1中三角形表示),落入待求取面積圖形內部的點(圖1中紅色三角形)的數量為in_count,則圖中不規則圖形的面積可由公式(1)近似求得。

在式(1)中,s表示待求取不規則圖形的面積,sfull表示整幅圖像的面積。由于整幅圖像的形狀往往是規則圖形(多為矩形),因此sfull較容易求取。
隨著隨機點數量count的增加,所求取的不規則圖形的面積將會逐漸逼近真實的圖形面積,如圖2所示。

圖2 撒入100萬隨機點圖像
以上就是使用蒙特卡洛方法求取不規則圖形面積的基本原理。本文使用Python語言實現以上算法流程,所用到的第三方庫包括圖像處理庫PIL,數據處理庫Numpy,以及可視化庫Matplotlib[2]。
算法的主要流程如下所示:
①讀取圖像文件像素點的顏色到矩陣pixel中,矩陣的行數與列數分別對應圖像的寬度w和高度h。
②使用均勻隨機數發生器生成數量的隨機點,點的橫坐標和縱坐標范圍分別為[0,w)和[0,h)。
③循環次,統計所有隨機點中落在不規則圖形內部的隨機點的數量。隨機點是否在不規則圖形內部,是通過其對應的RGB顏色值進行判斷得到的。
④通過式(1)計算不規則圖形的面積。
選取兩幅形狀不規則的圖形如圖3和圖4所示。

圖3 不規則圖形1

圖4 不規則圖形2
實驗參數如表1所示:
在表1中,圖形的實際面積是通過圖像中不規則圖形所占的像素點數計算出來的,其意義是為了方便與本文所實現的基于蒙特卡洛方法求取的不規則圖形的面積進行對比。
圖5和圖6分別顯示了采樣點數在10~10000范圍內變化時,使用蒙特卡洛方法求取的近似圖形面積(以像素點數表示)。

表1 實驗參數

圖5 不同采樣數下圖形1的近似面積

圖6 不同采樣數下圖形2的近似面積
從圖5和圖6中可見,隨著采樣點數的增加,使用蒙特卡洛方法求取的不規則圖形面積的近似值逐漸逼近其實際值,在應用時,可根據實際問題的精度要求和圖像大小選取合適的采樣點數。
基于蒙特卡洛方法,我們描述并實現了一種求取不規則圖形的方法,并通過實驗驗證了該方法的有效性。實驗表明,蒙特卡洛方法能夠很好地求得不規則圖形面積的近似值。