日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Matlab】找到矩阵中每个连通域的最小值

發布時間:2025/3/15 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Matlab】找到矩阵中每个连通域的最小值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.Introduction

連通域在我淺薄的圖像處理知識中,一直是很神圣的存在。最近想在Matlab里實現的時候,發現竟然一個函數就解決了,Matlab真香!

2.Materials and methods

首先,還是介紹一下主角函數 bwlabel,看語法還是比較簡單的,其中第二個參數 conn 可以設置判斷連通域時用4連接還是8連接。另外,這種既可以輸入一個參數,又可以輸入兩個參數的函數實現,可以看我之前的博客,文末有鏈接~


ok,那接下來就實際試試吧:

a = xlsread('dataset.xlsx'); b = bwlabel(a,4);


這里我們選的是4聯通,如果改成8聯通的話,標簽就只剩0和1了,因為8聯通的條件更嚴格,也更難判定其為連通域。具體原理看下圖:


目前為止,我們找到了矩陣中的連通域,那么接下來就要尋找各個連通域中的最小值了。代碼如下:

data = xlsread('dataset.xlsx'); dataLabel = bwlabel(data,4);dataLabelType = unique(dataLabel); labelNum = size(dataLabelType,1)-1; % Obtain the number of label type. minData = ones(labelNum,1); % Initializing the minimum element in matrix. minDataRow = zeros(labelNum,1); % Initializing the row index of minimum element in each label. minDataCol = zeros(labelNum,1); % Initializing the column index of minimum element in each label.for i = 1:labelNumdataInSpecialLabel = data(dataLabel==i); % Obtain all the elements of special label (Continuously increasin).minData(i,1) = min(dataInSpecialLabel); % Obtain the minimum one.[minDataRow(i,1),minDataCol(i,1)] = find(data == minData(i,1)); % Record the row and column index of the minimum one. end

代碼中的 unique 函數是確定數組中都存在哪些數,具體用法看文末鏈接。

3. Results and discussion

運行代碼,看看結果:


結果如上圖所示,代碼輸出了每個連通域最小值所處的行列坐標,代碼功能也便實現了。

4. Conclusion

其實我一直喜歡代碼開源,因為之前看了很多博客,有的是講原理沒代碼,有的放代碼沒注釋,甚至運行直接報錯。所以我就想,直接把代碼貼出來,再配一些解釋說明,方便大家使用,也希望不要再反復造輪子了。

但是,我寫代碼是我想寫,而不是我要寫。一些代碼封裝的像藝術品,有的人都不會用,真白瞎我代碼了。

猜你喜歡:👇🏻
?【Matlab】如何提取矩陣中特定位置的元素?
?【Matlab】如何確定數組中存在哪幾個數?
?【Matlab】矩陣中選取任意子矩陣

總結

以上是生活随笔為你收集整理的【Matlab】找到矩阵中每个连通域的最小值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。