區域分離與合併

2021-09-29 22:07:22 字數 1729 閱讀 5393

這裡先介紹區域分割的基本概念,雖然抽象,但仔細琢磨一下還是可以理解的。

令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...

目標檢測時的區域合併

在目標檢測過程中,可能會遇到這樣的情況 乙個目標被標記為多個區域。如果乙個目標被標記為多個區域,後續的跟蹤很容易出現跟錯 跟丟,這個情形在自動檢測場和是很避諱的。以下提供乙個避免的方法 通過一些條件判斷,可以將本為同一目標的區域辨識,前文應該講過判斷方法。中心距離在閾值範圍內 兩個區域存在交集 包含...