itk中的黑白TopHat演算法

2021-08-02 12:47:50 字數 1793 閱讀 5366

本文要寫的是tophat演算法,這個演算法屬於形態學變換,主要應用在解決當光照不均等條件引起的背景灰度不均問題(敲黑板,tophat是應用在灰度影象的,不是二值影象!)。tophat演算法本質是形態學變換中開閉運算的組合。開運算能消除灰度影象中較亮的細節,閉運算則能消除較暗的細節,(如果對應到座標系,亮對應波峰,暗對應波谷)。

whitetophat:原影象-開運算結果

blacktophat:閉運算結果-原影象

itk中提供的類名叫做:itkwhitetophatimagefilter;itkblacktophatimagefilter

使用方法:

typedef itk::binaryballstructuringelementsrtype;

srtype kernel;

kernel.setradius( 22 );

kernel.createstructuringelement();

//typedef itk::whitetophatimagefiltertophatfiltertype;

typedef itk::blacktophatimagefiltertophatfiltertype;

tophatfiltertype::pointer tophatfilter = tophatfiltertype::new();

tophatfilter->setinput( intput_data );

tophatfilter->setsafeborder( false);

tophatfilter->setkernel( kernel );

tophatfilter->update();

原始碼分析,看下之前的理論和實際能不能對得上。這裡只看whitetophatimagefilter,black反過來就好了:

1.資料生成

template void 

whitetophatimagefilter::generatedata()

挺簡單的演算法,是不是自己寫乙個也差不多呢?官方也是這麼寫的,再次說明影象處理不是黑魔法,只要弄清楚原理,你也可以的。

這裡有個需要注意的點,在tophat中,需要預設模版,模版的尺寸會影響濾波的結果。模版應該比目標大一點,剛好能覆蓋過目標的細節。對應**中的itkbinaryballstructuringelement設定。實際上,這也是tophat演算法的優勢,可以靈活的設定模版來適應不同的情況。

感謝網友分享,下面的解釋很明朗,貼一下:

影象f 的頂帽變換h定義為影象f與影象f的開運算之差, 可表示為:  h = f -(f*s) 

有一次去莫干山玩,路上居然遇到乙隻狐狸,這可太稀奇了。心血來潮,我遠遠地衝它大喝一聲:「孽畜!還不快快現出原形?!」狐狸愣了一下,居然開口說話了:「這本來就是原形啊!」「媽呀有妖怪!」我大叫一聲,撒丫子就跑,狐狸嗷地一聲跟在我後面跑,邊跑邊叫:「哪兒,哪兒有妖怪啊?別丟下我!嚇死我了!」

參考文獻:

1.2.

3.

itk中的Cos變換

itk中有個類叫做itkcosimagefilter,是將影象中每個點做cos變換。可能大家現在還不知道有什麼用,那麼本文只談實現,不談應用場景。使用方法 typedef itk cosimagefilter imagetype,imagetype filtertype filtertype poi...

itk中的花式資料切割(二)

上篇切割的特徵是越切越小,這次換個不會變小的方法,當然不同的方法有利有弊,中間取捨,看實際情況。0.先構建乙個與原始資料同等大小的影象,這個是前提條件 略。不清楚的請轉 itk中的基本影象操作 一文 1.沿著z軸按照預設範圍切出方盒子 其實隨便xyz那一邊都一樣 imagetype sizetype...

itk中的花式資料切割(五)

今天繼續研究資料切割,也是對之前四篇切割內容的補充,內容不多,step by step。itk中有乙個類叫做itkcropimagefilter,是itkextractimagefilter的派生方法。先上 看一下基本用法 imagetype sizetype extractsize extract...