分形分析軟體FracLab計算Box-counting分形維數
來自專欄分形分析軟體與應用5 人贊了文章Chaptina:分形分析軟體
承接上一篇文章,這裡講一下MATLAB工具箱FracLab計算Box-counting維數的方法。
分形維數的Box counting計算方法1.下載安裝FracLab工具箱
FracLab - 2.2如何添加MATLAB工具箱
2.數據預處理
把感興趣區域與背景區分開來以降低雜訊干擾,也即是把RGB圖像從一個三維的數據轉換為一個二值的二維矩陣。
對導入後的矩陣數據進行操作,將其轉化為二值數據,這裡有一個我自己寫的函數進行相應的轉換操作:
function z = r2gb( data )%函數的功能為將一個rgb圖像數據轉化為灰度數據、二值數據gray_data = rgb2gray(data);%把RGB圖像(三維矩陣)轉化成灰度圖像,得到的gray_data是一個八階灰度的二維矩陣%這裡的gray_data是uint8類型的數據,是不能被fraclab處理的threshold = graythresh(gray_data);%自動確定二值化閾值binary_data = im2bw(gray_data,threshold);%對圖像進行二值化%把一個灰度圖像轉化成二值圖像,這裡得到的binary_data是一個邏輯型數據,無法被FracLab識別binary_data_double = double(binary_data);%把邏輯型數據轉化成雙精度的數值型數據以用於後續的操作binary_data_reverse_double = double(~binary_data);%對二值數據求反並轉換為數值型數據%%=======================================這裡很重要==========================================%之所以要求反,是因為對於二值圖像而言白色區域為1,黑色區域為0%很多圖像的圖像特徵是用黑色曲線來表徵的,這樣的圖像經過二值化之後數值為1的點對應的是背景%導致最終計算得到的是背景的分形維數而不是我們想要的曲線的分形維數,這種情況下需要對圖像進行求反%後續的數據操作對象為binary_data_reverse%如果圖像本身就是用白色曲線來表徵它的特徵,則後續的數據操作對象為binary_data%%=======================================這裡很重要==========================================figuresubplot(2,2,1);imshow(gray_data);title(Grayscale Image);subplot(2,2,2);imshow(binary_data_double);title(Binary Image);subplot(2,2,3);imshow(binary_data_reverse_double);title(Reversal Binary Image);assignin(base,binary_data_reverse,binary_data_reverse_double)assignin(base,gray_data,gray_data)assignin(base,binary_data,binary_data_double)%將需要的中間變數呈現在工作區end
對輸入的圖像數據進行操作
r2gb(tri_8_610)%我這裡用到的圖像是一個迭代了八次的謝爾賓斯基三角形(理論分形維數為lg3/lg2≈1.58)
在工作區會生成如下三個變數
3.維數計算
在命令行窗口輸入如下命令
fraclab
調出fraclab的交互界面
點擊workspace,選擇要處理的數據,這裡選擇的是binary_data_reverse(數據的選擇參考上面程序里的注釋),點擊上面菜單欄里的Dimensions--Box dimension:box method--Binary Data,出現如下界面:
這裡說明一下這裡面各個參數的含義:
(1)Box Sizes
max size和min size分別是盒子的大小的上下限,是根據圖片大小來自動計算的,這個一般不用修改;
# of box 是在上面那個上下限里選擇多少種不同大小的盒子,也即是最後得到的圖上的散點數;
progressio 是盒子大小的遞進關係,冪律or線性,選擇冪律得到的散點之間的間距是均勻的;
Aspect Ratio 選擇默認即可;
(2)Regression
Type:散點圖曲線擬合方式;
Range:自選或是自動,自選的話(圖中的選項)點擊「compute」會出來一個折線圖由你自己選擇擬合曲線的範圍,如下圖所示:
例如我選擇如下圖所示的範圍,在圖形的上部會顯示估計得到的維數,相關係數和最大誤差:
如果是自動的話,會由程序為你選擇一個範圍得到分形維數並在右下角顯示:
可以看到計算得到的維數值與理論值1.58還是很接近的。
推薦閱讀: