Retina クラスの概要
- 覚え書き
- 網膜モデルは次の名前空間に含まれていることを忘れないこと。C++ では cv::bioinspired、Python では cv.bioinspired
はじめに
このクラスは、Gipsa/Listic 研究室のヒト網膜モデルの主要な制御を提供する。これは2つの主要な網膜情報チャンネルをモデル化する、分離不可能な時空間フィルタである。
- 詳細な色覚のための中心窩視 (foveal vision):小細胞 (parvocellular) 経路。
- 高感度な過渡信号検出(動きとイベント)のための周辺視 (peripheral vision):大細胞 (magnocellular) 経路。
このモデルは Jeanny Herault の研究 [140] に由来する。これは Alexandre Benoit の博士課程および彼の現在の研究 [26], [263] に関わっている。彼は現在 OpenCV 内でこのモジュールを保守している。これには [70] のような Jeanny の他の博士課程の学生の研究や、Jeanny の著書で説明されている Barthelemy Durette の対数極座標変換が含まれている。
より詳細には、ここで実装されている網膜の特性の概要を以下に示す。
- regarding luminance and details enhancement :
- 局所的な対数輝度圧縮(入力点では光受容体により、出力では神経節細胞により行われる)。
- 外網状層 (Outer Plexiform Layer) レベルでのスペクトル白色化(光受容体と水平細胞の時空間フィルタリング)。
前者の動作は輝度範囲を圧縮し、非常に明るい領域と非常に暗い領域を多くのディテールとともに同じ画像上で可視化できるようにする。後者は低周波の輝度エネルギー(平均輝度)を低減し、中周波(ディテール)を強調する。これらをすべて組み合わせて適用することで、網膜は高レベルの解析に先立って視覚信号を適切に準備する。これらの特性は、光の変化が大幅に低減され、興味深い時間的一貫性を持つ動画において特に有用である。
- regarding noise filtering :
- 高周波の空間的・時間的ノイズが除去される。小細胞 (Parvo) 経路と大細胞 (Magno) 経路の両方の出力がこの恩恵を受ける。ノイズ低減は分離不可能な時空間フィルタリングによる恩恵を受ける。
- 小細胞 (Parvo) 出力では、静的なテクスチャが強調されノイズが除去される(動画では時間的ノイズがうまく除去される)。ただし、ヒトの挙動と同様に、動いているテクスチャは平滑化される。したがって、動いている物体のディテールは、網膜がそれを追跡し自身の視点から静止状態に保つ場合にのみ強調できる。
- 大細胞 (Magno) 出力では、困難な照明条件下でもノイズ誤差を低減しつつ、イベント(動き、変化)をよりクリーンに検出できる。トレードオフとして、Magno 出力は低空間周波数の信号であり、イベントのブロブを確実に抽出できる(そのためには TransientAreasSegmentationModule モジュールを確認すること)。
使い方
このモデルは、次の目的で前処理段階として使用できる。
- 信号対雑音比を高め、入力画像の輝度範囲に対して頑健な強調されたディテールを持つテクスチャ解析を行う(提供されている getParvo メソッドを使用して小細胞網膜チャンネルの出力を確認すること)
- 上記の特性も活用する動き解析を行う(提供されている getMagno メソッドを使用して大細胞網膜チャンネルの出力を確認すること)
- いずれか一方または両方のチャンネルを用いた一般的な画像/動画シーケンスの記述。Bag of Words アプローチにおける Retina の使用例は [263] に示されている。
- 覚え書き
- コンピュータビジョンアプリケーションで使いやすくするため、2つの網膜チャンネルはすべての入力画像に適用される。これは実際の網膜のトポロジーには従っていないが、画像処理の観点からは実用的である。網膜マッピング(中心窩視および傍中心窩視)が必要な場合は、クラス内で提供されている対数サンプリング機能を使用すること。
- 網膜の説明、コード、補足的な解説やデモンストレーションのためのユースケースを拡張することで、ぜひ貢献していただきたい。
使用例の図解
小細胞経路 (parvo retina output) を用いた画像の前処理
予備的な説明として、まず視覚的な例から始めよう。逆光問題のある低品質のカラー jpeg 画像にフィルタを適用してみる。これが対象となる入力である... "ふむ、カメラで撮影したものよりも、肉眼ではもっと多くのものが見えていたのだが..."
a low quality color jpeg image with backlight problems.
以下は、デフォルトパラメータで画像全体に適用した網膜の中心窩モデルである。局所輝度がどうであれディテールが強調される。ここでは輪郭が強く強調されているが、ノイズレベルは低く保たれている。この構成ではハロー効果が意図的に可視化されている。以下のパラメータの議論を参照し、それらを除去するには horizontalCellsGain を 1 に近づけること。
the retina foveal model applied on the entire image with default parameters. Here contours are enforced, luminance is corrected and halo effects are voluntary visible with this configuration, increase horizontalCellsGain near 1 to remove them.
以下は、自然さの知覚に重点を置いたパラメータ設定で画像全体に適用した、2つ目の網膜中心窩モデルの出力である。"おお、一日の終わりに山を眺めている私の猫が、今や認識できる!"。ここでは輪郭が強調され、輝度が補正されているが、この構成ではハローが回避されている。逆光効果が補正され、ハイライトのディテールも保持されている。したがって、低品質の jpeg 画像であっても、輝度情報が多少残っていれば、網膜は適切な視覚信号を再構成できる。このような構成は、[26] および以下で議論するデモコードで述べられているように、ハイダイナミックレンジ (HDR) 画像を 8bit 画像に圧縮する際にも有用である。ページの末尾に示すように、デフォルトからのパラメータ変更は次のとおりである。
- horizontalCellsGain=0.3
- photoreceptorsLocalAdaptationSensitivity=ganglioncellsSensitivity=0.89.
the retina foveal model applied on the entire image with 'naturalness' parameters. Here contours are enforced but halo effects are avoided with this configuration, horizontalCellsGain is 0.3 and photoreceptorsLocalAdaptationSensitivity=ganglioncellsSensitivity=0.89.
この予備的なデモで観察されるように、網膜はさまざまなパラメータで設定できる。デフォルトでは、上の図に示すように、網膜は平均輝度エネルギーを大幅に低減し、視覚シーンのすべてのディテールを強調する。輝度エネルギーとハロー効果は変調できる(2つの例に示すように、誇張から打ち消しまで)。独自のパラメータを使用するには、少なくとも一度 write(String fs) メソッドを使用すること。これによりすべてのデフォルトパラメータを含む適切な XML ファイルが書き出される。その後、独自に調整し、setup(String fs) メソッドを使用していつでも再読み込みできる。これらのメソッドは、後述する Retina::RetinaParameters メンバ構造体を更新する。XML パラメータファイルのサンプルはページの末尾に示す。
小細胞経路 (parvo retina output) を用いたトーンマッピング処理機能
この網膜モデルは輝度範囲の圧縮を自然に扱う。局所適応段階とスペクトル白色化が輝度範囲の圧縮に寄与する。さらに、トーンマッピングされた画像をしばしば劣化させる高周波ノイズは処理の初期段階で除去され、その結果、自然な知覚とノイズのないトーンマッピングが得られる。
上記のデモと比較して、設定の違いは次のとおりである(詳細は bioinspired/samples/OpenEXRimages_HDR_Retina_toneMapping.cpp を参照)。
- HDR 画像を読み込み(OpenEXR フォーマットは OpenCV でサポートされている)、ソルト&ペッパー状のピクセル劣化を除去するためにヒストグラムの両端を約5%と95%でカットする。
- apply retina with default parameters along with the following changes (generic parameters used for the presented illustrations of the section) :
- retina Hcells gain =0.4(デフォルト構成と比較した主な変更点:ハロー効果を大幅に低減する)
- localAdaptation_photoreceptors=0.99(局所適応を強化するため、デフォルト値より少し高い)
- localAdaptation_Gcells=0.95(局所適応の強化のため、こちらもデフォルトよりわずかに高い)
- getParvo() メソッドを使用して小細胞出力を取得する。
これらのパラメータを構成ファイルで指定する方法については、このページの末尾を参照すること。
以下の2つの図は、このような構成が2つの画像サンプルに与える効果を示している。
HDR image tone mapping example with generic parameters. Original image comes from http://openexr.com/ samples (openexr-images-1.7.0/ScanLines/CandleGlass.exr)
HDR image tone mapping example with the same generic parameters. Original image comes from http://www.pauldebevec.com/Research/HDR/memorial.exr)
大細胞経路 (magno網膜出力) を用いた運動およびイベント検出
時空間的なイベントは、網膜の magno 出力 (getMagno() メソッドを使用) を用いることで簡単に検出できる。そのエネルギーは運動速度に対して線形に増加する。bioinspiredモジュールにも提供されているTransientAreasSegmentationModuleクラスにより、イベントブロブ検出器が提案されている。基本的な考え方は、近傍に対する局所的なエネルギーの低下を検出し、しきい値を適用することである。このような処理は、TRECVidチャレンジ [263] における動画のbag of words記述に用いられており、過渡領域における動画フレームの記述のみを可能にする。
ここでは、http://changedetection.net/ から取得した RGB およびサーマル動画の例について、網膜出力のいくつかの図を示す。
- 覚え書き
- ここでは、強いエッジの周りにハローを生成するデフォルトの網膜設定を使用している。時間定数により、動いている物体に時間的効果が可視化されることに注意(動画の静止画による図示に有用)。ハローは retina Hcells gain を増加させることで除去でき、時間的効果は時間定数の値を減少させることで低減できる。また、2つの網膜出力は範囲 [0:255] に再スケールされるため、何も動いていないときに描画すると magno 出力に多くの「ノイズ」が表れることがある点も考慮すること。ただし、getMagnoRAW ゲッターを使用して取得すれば、そのエネルギーは低いままである。
Retina processing on RGB image sequence : example from http://changedetection.net/ (baseline/PETS2006). Parvo enforces static signals but smooths moving persons since they do not remain static from its point of view. Magno channel highlights moving persons, observe the energy mapping on the one on top, partly behind a dark glass.
Retina processing on gray levels image sequence : example from http://changedetection.net/ (thermal/park). On such grayscale images, parvo channel enforces contrasts while magno strongly reacts on moving pedestrians
参考文献
詳細については、次の論文を参照すること。
- モデルの説明:[26]
- Bag of Wordsアプローチでのモデル利用 : [263]
- Jeanny Heraultの参考研究を参照のこと。彼の著書で読むことができる : [140]
この網膜フィルタのコードには、著者がコードを書き直した博士課程/研究の同僚による研究上の貢献が含まれている。
- Brice Chaix de Lavarene の博士研究によるカラーモザイク化/デモザイク化と、その参考論文を知るには retinacolor.hpp モジュールを参照すること:[70]
- Barthelemy Durette の博士研究と Jeanny Herault に由来する網膜の空間的対数サンプリングを知るには imagelogpolprojection.hpp を参照すること。Retina / V1 皮質投影も提案されており、これは Jeanny との議論に由来する。詳細は上記で引用した Jeanny Herault の著書にある。
- モデル内の特定のメソッドとして実装されているHDRトーンマッピングに関するMeylan&alの研究 : [198]
網膜プログラミングインターフェース
提案されているクラスにより、Gipsa(予備的な研究)/ Listic 研究室の網膜モデルを使用できる。静止画像、画像シーケンス、動画シーケンスに適用できる。
Retina インターフェースの概要を以下に示す。Retina::create() 関数(C++, Java, Python)でインスタンスを1つ確保する。
namespace cv{
namespace bioinspired{
class Retina : public Algorithm
{
public:
struct RetinaParameters;
void setup (
String retinaParameterFile=
"",
const bool applyDefaultSetupOnFailure=
true);
void setup (FileStorage &fs,
const bool applyDefaultSetupOnFailure=
true);
void setup (RetinaParameters newParameters);
virtual void write (FileStorage &fs)
const;
void setupOPLandIPLParvoChannel (
const bool colorMode=
true,
const bool normaliseOutput=
true,
const float photoreceptorsLocalAdaptationSensitivity=0.7,
const float photoreceptorsTemporalConstant=0.5,
const float photoreceptorsSpatialConstant=0.53,
const float horizontalCellsGain=0,
const float HcellsTemporalConstant=1,
const float HcellsSpatialConstant=7,
const float ganglionCellsSensitivity=0.7);
void setupIPLMagnoChannel (
const bool normaliseOutput=
true,
const float parasolCells_beta=0,
const float parasolCells_tau=0,
const float parasolCells_k=7,
const float amacrinCellsTemporalCutFrequency=1.2,
const float V0CompressionParameter=0.95,
const float localAdaptintegration_tau=0,
const float localAdaptintegration_k=7);
void setColorSaturation (
const bool saturateColors=
true,
const float colorSaturationValue=4.0);
};
}}
virtual void clearBuffers()=0
Clears all retina buffers.
virtual Size getOutputSize()=0
Retreive retina output buffer size that can be different from the input if a spatial log transformati...
virtual void applyFastToneMapping(InputArray inputImage, OutputArray outputToneMappedImage)=0
Method which processes an image in the aim to correct its luminance correct backlight problems,...
virtual void activateContoursProcessing(const bool activate)=0
Activate/desactivate the Parvocellular pathway processing (contours information extraction),...
virtual void setup(String retinaParameterFile="", const bool applyDefaultSetupOnFailure=true)=0
Try to open an XML retina parameters file to adjust current retina instance setup.
virtual Mat getMagnoRAW() const =0
virtual void getParvo(OutputArray retinaOutput_parvo)=0
Accessor of the details channel of the retina (models foveal vision).
virtual Size getInputSize()=0
Retreive retina input buffer size.
virtual void write(String fs) const =0
Write xml/yml formated parameters information.
virtual String printSetup()=0
Outputs a string showing the used parameters setup.
virtual void run(InputArray inputImage)=0
Method which allows retina to be applied on an input image,.
virtual void setColorSaturation(const bool saturateColors=true, const float colorSaturationValue=4.0f)=0
Activate color saturation as the final step of the color demultiplexing process -> this saturation is...
static Ptr< Retina > create(Size inputSize)
virtual void setupOPLandIPLParvoChannel(const bool colorMode=true, const bool normaliseOutput=true, const float photoreceptorsLocalAdaptationSensitivity=0.7f, const float photoreceptorsTemporalConstant=0.5f, const float photoreceptorsSpatialConstant=0.53f, const float horizontalCellsGain=0.f, const float HcellsTemporalConstant=1.f, const float HcellsSpatialConstant=7.f, const float ganglionCellsSensitivity=0.7f)=0
Setup the OPL and IPL parvo channels (see biologocal model)
virtual void setupIPLMagnoChannel(const bool normaliseOutput=true, const float parasolCells_beta=0.f, const float parasolCells_tau=0.f, const float parasolCells_k=7.f, const float amacrinCellsTemporalCutFrequency=1.2f, const float V0CompressionParameter=0.95f, const float localAdaptintegration_tau=0.f, const float localAdaptintegration_k=7.f)=0
Set parameters values for the Inner Plexiform Layer (IPL) magnocellular channel.
virtual void getMagno(OutputArray retinaOutput_magno)=0
Accessor of the motion channel of the retina (models peripheral vision).
virtual RetinaParameters getParameters()=0
virtual Mat getParvoRAW() const =0
virtual void activateMovingContoursProcessing(const bool activate)=0
Activate/desactivate the Magnocellular pathway processing (motion information extraction),...
@ RETINA_COLOR_BAYER
standard bayer sampling
Definition retina.hpp:86
std::string String
Definition cvstd.hpp:151
Size2i Size
Definition types.hpp:373
const _InputArray & InputArray
Definition mat.hpp:586
std::shared_ptr< _Tp > Ptr
Definition cvstd_wrapper.hpp:23
const _OutputArray & OutputArray
Definition mat.hpp:588
網膜のセットアップ
設定ファイルの管理
Retina::write および Retina::load メソッドを使用すると、Retina の構成を格納する XML ファイルを作成または読み込む。
デフォルトの構成を以下に示す。
<?xml version="1.0"?>
<opencv_storage>
<OPLandIPLparvo>
<colorMode>1</colorMode>
<normaliseOutput>1</normaliseOutput>
<photoreceptorsLocalAdaptationSensitivity>7.5e-01</photoreceptorsLocalAdaptationSensitivity>
<photoreceptorsTemporalConstant>9.0e-01</photoreceptorsTemporalConstant>
<photoreceptorsSpatialConstant>5.7e-01</photoreceptorsSpatialConstant>
<horizontalCellsGain>0.01</horizontalCellsGain>
<hcellsTemporalConstant>0.5</hcellsTemporalConstant>
<hcellsSpatialConstant>7.</hcellsSpatialConstant>
<ganglionCellsSensitivity>7.5e-01</ganglionCellsSensitivity></OPLandIPLparvo>
<IPLmagno>
<normaliseOutput>1</normaliseOutput>
<parasolCells_beta>0.</parasolCells_beta>
<parasolCells_tau>0.</parasolCells_tau>
<parasolCells_k>7.</parasolCells_k>
<amacrinCellsTemporalCutFrequency>2.0e+00</amacrinCellsTemporalCutFrequency>
<V0CompressionParameter>9.5e-01</V0CompressionParameter>
<localAdaptintegration_tau>0.</localAdaptintegration_tau>
<localAdaptintegration_k>7.</localAdaptintegration_k></IPLmagno>
</opencv_storage>
以下は、これらすべての引数についての説明である。網膜効果(輪郭の強調、ハロー効果、動きへの感度、動きのぼかしなど)を強めたり弱めたりするため、好みに応じて調整するとよい。
基本パラメータ
もっとも単純な引数は次のとおりである:
- colorMode : 網膜にカラー情報を処理させる(1の場合)か、グレースケール画像を処理させる(0の場合)かを指定する。後者の場合、入力の最初のチャンネルのみが処理される。
- normaliseOutput : 各チャンネルがこの引数を持つ。値を1に設定すると、対象チャンネルの出力が0から255の範囲に再スケールされる。この場合、Magnocellular(大細胞系)出力レベル(動き/過渡チャンネル検出)には注意すること。残留ノイズも再スケールされてしまう!
注 : カラーを使用すると、カラーチャンネルの多重化/逆多重化が必要となり、処理量も増加する。グレースケールを使えばはるかに高速な処理が期待できる。すべての網膜処理について1ピクセルあたり約30回の積演算で済み、最近ではマルチコアアーキテクチャ向けに並列化されている。
光受容器パラメータ
以下の引数は、網膜の入口である光受容体に作用し、後続のすべての処理に影響を与える。これらのセンサは、時間的・空間的なデータを平滑化し、局所輝度に対する感度も調整する低域通過時空間フィルタであり、その結果、ディテールの抽出を改善し、高周波ノイズを除去する。
- photoreceptorsLocalAdaptationSensitivity 0から1の範囲。1に近い値は、光受容体レベルでの高輝度の対数圧縮効果を高める。0に近い値はより線形な感度を与える。これを単独で大きくすると、Parvo(ディテールチャンネル)の出力画像が白飛びすることがある。ganglionCellsSensitivityと組み合わせて調整すると、局所輝度がどのような状態であっても画像を非常に高コントラストにできる... ただし自然さが低下するという代償を伴う。
- photoreceptorsTemporalConstant 網膜の入口における低域通過フィルタ効果の時間定数を設定する。高い値は強い時間平滑化効果をもたらす。動いている物体はぼやけて消えることがある一方、静止物体が優先される。ただし網膜処理を開始したとき、安定状態に達するまでに時間がかかる。
- photoreceptorsSpatialConstant 光受容体の低域通過フィルタ効果に関連する空間定数を指定する。これらの引数は、以降で許容される空間信号周期の最小値を指定する。通常、このフィルタは高周波ノイズを除去する。一方、値が0だとノイズはまったく除去されず、値を大きくすると高い空間周波数が除去され始め、徐々に低い周波数も除去されていく... 入力画像のディテールを残したい場合は高い値にしないよう注意すること! カラー画像については0.53という値が良い折衷案である。この選択はカラースペクトルにあまり影響しないからである。これより高い値は、グレーでぼやけた出力画像をもたらす。
水平細胞パラメータ
この引数群は、光受容体に接続された神経ネットワークである水平細胞を調整する。光受容体の感度を調節し、最終的なスペクトル白色化(空間帯域通過効果の一部であり、視覚的ディテールの強調に寄与する)のための処理を完成させる。
- horizontalCellsGain これは重要な引数である! 平均輝度に関心がなく、ディテールの強調だけに注目したい場合は、この引数をゼロに設定する。一方、環境の輝度データをある程度残したい場合は、低い空間周波数をシステムに通すために高めの値(<1)を設定する。
- hcellsTemporalConstant 光受容体と同様に、この引数は入力データを平滑化する低域通過時間フィルタの時間定数に作用する。ここでは、高い値は網膜の強い残効を生み、低い値は網膜の応答性を高める。網膜の強い残効を抑えるため、この値はphotoreceptorsTemporalConstantより小さくすべきである。
- hcellsSpatialConstant これらの細胞フィルタの低域通過特性の空間定数である。以降で許容される最も低い空間周波数を指定する。視覚的には、高い値は非常に低い空間周波数の処理をもたらし、目立つハロー効果を生じる。低い値はこの効果を軽減するが、photoreceptorsSpatialConstantの値より低くはできないという制約がある。これら2つの引数が実際には網膜の空間帯域通過特性を指定する。
注 前述の引数による処理が完了すると、入力データはノイズが除去され、輝度もすでに部分的に強調されている。以下の引数は、出力される2つの網膜信号の最終処理段階に作用する。
Parvo (詳細チャンネル) 専用パラメータ
- ganglionCellsSensitivity このディテール専用チャンネルの出力で生じる最終的な局所適応の強さを指定する。引数値は0から1の範囲を保つ。低い値は線形応答を与えがちで、高い値は残った低コントラスト領域を強調する。
注 : この引数は、明るい領域であっても視覚シーンの低エネルギーのディテールを優先することで、白飛びした画像を補正できる。
IPL Magno (運動/過渡チャンネル) パラメータ
画像の情報がクリーニングされると、このチャンネルは高域通過時間フィルタとして働き、
過渡信号(イベント、動きなど)に関連する信号のみを選択する。低域通過空間フィルタが抽出された過渡データを平滑化し、最終的な対数圧縮が弱い過渡イベントを強調することでイベント感度を高める。
- parasolCells_beta 一般にゼロに設定され、この処理段階の入口における増幅ゲインと見なせる。通常は0に設定する。
- parasolCells_tau 追加できる時間平滑化効果。
- parasolCells_k 空間フィルタリング効果の空間定数。残留ノイズの影響を受けにくい低い空間周波数の信号を優先するには、高い値に設定する。
- amacrinCellsTemporalCutFrequency 高域通過フィルタの時間定数を指定する。高い値はゆっくりとした過渡イベントを選択できるようにする。
- V0CompressionParameter 対数圧縮の強さを指定する。前述の説明と同様の動作だが、ここでは過渡イベントの感度を強調する。
- localAdaptintegration_tau 一般に0に設定され、実際にはここでは特に用途はない。
- localAdaptintegration_k 局所適応を行う領域のサイズを指定する。低い値は短い範囲の局所適応をもたらし(ノイズへの感度が高くなる)、高い値は対数圧縮を確実にする。
デモと実験 !
初めての実験
以下は、デフォルト引数(ハロー効果あり)でRetinaを使う方法を手短に示すコード断片である。次のセクションでは、メインのretinaクラスとともに提供される、より完全なデモへ誘導する。
ここでは、次の手順でウェブカメラのストリームを処理する方法を示す:
- 最初の入力画像を読み込んでそのサイズを取得する
- 適切な入力サイズでretinaインスタンスを確保する
- loop over grabbed frames :
- 新しいフレームを取得する
- フレームに対して実行する
- 2つの出力ゲッターを呼び出す
- 網膜の出力を表示する
C++版(bioinspired/samples/basicRetina.cpp を参照) :
#include <iostream>
int main(
int argc,
char* argv[]) {
videoCapture>>inputFrame;
myRetina->write("RetinaDefaultParameters.xml");
myRetina->setup("RetinaSpecificParameters.xml");
myRetina->clearBuffers();
while(true){
if (videoCapture.isOpened())
videoCapture>>inputFrame;
else
break;
imshow('input frame', inputImage)
myRetina->run(inputFrame);
myRetina->getParvo(retinaOutput_parvo);
myRetina->getMagno(retinaOutput_magno);
}
}
Comma-separated Matrix Initializer.
Definition mat.hpp:964
MatSize size
Definition mat.hpp:2511
Class for video capturing from video files, image sequences or cameras.
Definition videoio.hpp:790
void imshow(const String &winname, InputArray mat)
Displays an image in the specified window.
int waitKey(int delay=0)
Waits for a pressed key.
int main(int argc, char *argv[])
Definition highgui_qt.cpp:3
このC++コードを次のコマンドでコンパイルする :
// compile
g++ basicRetina.cpp -o basicRetina -lopencv_core -lopencv_highgui -lopencv_bioinspired -lopencv_videoio -lopencv_imgcodecs
Python版
import cv2 as cv
succeed, inputImage=videoHandler.read()
retina = cv.bioinspired_Retina.create((inputImage.shape[1], inputImage.shape[0]))
retina.write('retinaParams.xml')
retina.setup('retinaParams.xml')
stillProcess=True
while stillProcess is True:
stillProcess, inputImage=videoHandler.read()
retina.run(inputImage)
retinaOut_parvo=retina.getParvo()
retinaOut_magno=retina.getMagno()
cv.imshow(
'retina parvo out', retinaOut_parvo)
cv.imshow(
'retina magno out', retinaOut_magno)
より完全なデモ
- 覚え書き
- 以下の例に加えて、補足説明として tutorial/contrib セクションの Retina チュートリアルも参照すること。**
OpenCVとともに提供されるC++のサンプル例を見てみよう :
samples/cpp/retinademo.cpp は、ディテール強調(Parvoチャンネル出力)と過渡マップの観察(Magnoチャンネル出力)のためにretinaモジュールを使う方法を示す。画像、ビデオシーケンス、ウェブカメラ映像で試すことができる。代表的な使い方は次のとおり(OpenCVのインストール先がフォルダOpenCVReleaseFolderにある場合)
- 画像処理 : OpenCVReleaseFolder/bin/retinademo -image myPicture.jpg
- ビデオ処理 : OpenCVReleaseFolder/bin/retinademo -video myMovie.avi
- ウェブカメラ処理: OpenCVReleaseFolder/bin/retinademo -video
- 覚え書き
- このデモは、網膜のデフォルト引数を含むファイルRetinaDefaultParameters.xmlを生成する。次にこれをRetinaSpecificParameters.xmlにリネームし、引数を好みに合わせて調整し、プログラムを再読み込みして効果を確認する。
samples/cpp/OpenEXRimages_HDR_Retina_toneMapping.cpp は、ハイダイナミックレンジ(HDR)の輝度圧縮を行うためにretinaを使う方法を示す。
次に、カメラのブラケット撮影を使ってHDR画像を撮影し、OpenEXR画像を生成して、デモで処理する。
代表的な使い方。memorial.exr(samples/cpp/ フォルダ内に存在)のようなOpenEXR画像を持っていると仮定する
OpenCVReleaseFolder/bin/OpenEXRimages_HDR_Retina_toneMapping memorial.exr [省略可能: 'fast']
輝度圧縮を試せるよう、いくつかのスライダーが用意されていることに注意する。
'fast' オプションを使用しない場合、トーンマッピングは完全な網膜モデル [26] を用いて実行される。これには輝度エネルギーを低減できるスペクトル白色化が含まれる。'fast' オプションを使用する場合は、より単純な手法が用いられ、これは [198] で提示されたアルゴリズムを応用したものである。この手法も良好な結果をもたらし、処理が高速だが、場合によってはさらにいくつかのパラメータ調整が必要となる。