這裡先介紹區域分割的基本概念,雖然抽象,但仔細琢磨一下還是可以理解的。
令r表示整幅影象區域,並選擇乙個屬性p.對r進行分割的一種方法是一次將他細分為越來越小的四象限區域,以便對於任何區域ri,有p(ri)=true。我們從整個區域開始,如果p(ri)=true,我們把影象分割為四象限區域。若對於每個象限區域p為false,則將該象限區域再細分為四個子象限區域,以此類推。這種特殊的分離技術可方便地表示為四叉樹的形式,即每個節點正好有四個後代。
注意:樹根m對應於整幅影象,而每個節點對應於該節點的四個細分後代節點。上圖只細分了m3.
前面的討論可以總結為如下過程:
1、將滿足p(ri)=false的任何區域ri,分離為4個不相連的象限區域
2、當不可能進一步分離時,聚合滿足條件
3、當無法進一步聚合時停止操作
/ **
// 區域**合併的影象分割
// noffsetlne是行偏移量
// 由於**的層數太多了, 使用遞迴將使記憶體空間堆疊溢位
// 解決方法是使用乙個堆疊對要**的塊入棧
// 使用堆疊的方法類似在"區域生長"的實現方法
#include struct splitstruct
;void areasplitcombineex(byte* image0, // 源影象資料
unsigned int nallwidth, // 源影象的寬度
unsigned int nallheigh, // 源影象的高度
unsigned int w, // 這一塊影象的寬度
unsigned int h, // 這一塊影象的高度
unsigned int noffsetwidth, // 相對源影象資料的偏移寬度
unsigned int noffsetheigh) // 相對源影象資料的偏移高度
}if(nheighttemp[i] * nwidthtemp[j] == 0)
if(nheighttemp[i] * nwidthtemp[j] == 1)
else
continue;
}// 各塊影象的灰度平均值(每一塊影象的屬性值)
nvalues[i - 1][j - 1] = nvalue / (nheighttemp[i] * nwidthtemp[j]);
// 2. 對每一塊進行判斷是否繼續**(注意**的原則)
// 我這裡的**原則是: 影象的屬性值在屬性值平均值的誤差範圍之內就不**
if(nvalues[i - 1][j - 1] < 220) // 灰度平均值少於200 需要繼續** // 這裡就是**準則了
else // 合併(直接填充該塊影象為黑色)}}
}}}return;
}
參考 opencv 彩色通道分離 合併 實現區域標註
需求 在ct圖上貼出病變區域 沒什麼技術含量,方便有需要的快速cv param srcimage 輸入 背景圖 param ic 輸入 核心梗死區影象 param ip 輸入 梗死區影象 param rending 生成最終渲染結果 return 是否成功計算完成 bool generaterend...
Opencv中分離與合併多通道矩陣
用split函式可分離多通道,如將多通道矩陣m分離為多個單通道,這些單通道矩陣被存放在vector容器中。如下 mat m mat 2,2 vec3f 1,12,56 vec3f 2,5,32 vec3f 2,3,74 vec3f 21,3,15 vectorplanes split m,plane...
目標檢測時的區域合併
在目標檢測過程中,可能會遇到這樣的情況 乙個目標被標記為多個區域。如果乙個目標被標記為多個區域,後續的跟蹤很容易出現跟錯 跟丟,這個情形在自動檢測場和是很避諱的。以下提供乙個避免的方法 通過一些條件判斷,可以將本為同一目標的區域辨識,前文應該講過判斷方法。中心距離在閾值範圍內 兩個區域存在交集 包含...