JP5894614B2 - 画像処理用の記述子ベースストリームプロセッサおよびそれに関連する方法 - Google Patents

画像処理用の記述子ベースストリームプロセッサおよびそれに関連する方法 Download PDF

Info

Publication number
JP5894614B2
JP5894614B2 JP2014011404A JP2014011404A JP5894614B2 JP 5894614 B2 JP5894614 B2 JP 5894614B2 JP 2014011404 A JP2014011404 A JP 2014011404A JP 2014011404 A JP2014011404 A JP 2014011404A JP 5894614 B2 JP5894614 B2 JP 5894614B2
Authority
JP
Japan
Prior art keywords
kernel
image frame
defining
image
horizontal
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2014011404A
Other languages
English (en)
Other versions
JP2014142939A (ja
JP2014142939A5 (ja
Inventor
ワン,ヨン
チェン,ジァンロン
シャオ,イーミァオ
ファン,ヨウチェン
チ,シャオミン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Analog Devices Global ULC
Original Assignee
Analog Devices Global ULC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Analog Devices Global ULC filed Critical Analog Devices Global ULC
Publication of JP2014142939A publication Critical patent/JP2014142939A/ja
Publication of JP2014142939A5 publication Critical patent/JP2014142939A5/ja
Application granted granted Critical
Publication of JP5894614B2 publication Critical patent/JP5894614B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N23/00Cameras or camera modules comprising electronic image sensors; Control thereof
    • H04N23/10Cameras or camera modules comprising electronic image sensors; Control thereof for generating image signals from different wavelengths
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N23/00Cameras or camera modules comprising electronic image sensors; Control thereof
    • H04N23/80Camera processing pipelines; Components thereof

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Image Processing (AREA)
  • Advance Control (AREA)

Description

本開示は、一般的には、画像処理用のストリームプロセッサに関し、より具体的には、ストリームプロセッサの画像処理用のストリームコントローラ、関連するコンパイラ、および関連する方法に関する。
近年、ディジタルカメラおよび画像センサデバイス(CCD/CMOS画像センサなど)が、広く普及している。画像センサデバイスにおける画像処理を改善するために、様々な努力が払われている。例えば、カメラは、通常、アナログ/ディジタルフロントエンド、およびディジタルバックエンドを含む。カメラ性能を改善するために、例えばキャノン株式会社(Cannon, Inc.)製のDIGIC5のような、複雑なディジタルバックエンドプロセッサが開発されている。これらのバックエンドプロセッサは、例えば、ノイズキャンセレーション、シェーディング補正、顔検出、固定パターンノイズ補正、手ブレ防止(anti-shaking)、高ISO、その他の所望機能、またはそれらの組合せなどの、様々なカメラ機能を提供することができる。バックエンドプロセッサは強力ではあるが、開発サイクルが長く、コストが高いとともに、帯域幅も、ディジタルバックエンドプロセッサによって実行される機能を制限する。したがって、バックエンドプロセッサの作業負荷を低減するために、一部の機能は、ディジタルフロントエンドプロセッサに移されている。例えば、固定パターンノイズ除去回路やリオーダ回路(reorder circuit)などの、固定回路をディジタルフロントエンドプロセッサに組み込むことができる。そのような回路は、強力ではあるが、ディジタルフロントエンドプロセッサを再設計することを必要とし、これには時間を要し、またコスト効率も低い。
プログラマブルストリーム画像プロセッサは、異なるカメラアプリケーションを取り扱うための、高効率で低遅延(low latency)の解決策を提供する。例えば、様々なプログラミングを実装して、ストリームプロセッサが、固定パターンノイズ補正、リオーダ機能、およびその他所望機能を処理できることを確実にすることができる。ストリームコントローラは、画像を処理するときに、データ処理フローおよびカーネルスイッチングを制御するので、プログラマブルストリームプロセッサの重要部分である。既存のプログラマブルストリームプロセッサおよび関連するストリームコントローラは、その意図する目的に対して概して適当であったが、それらは、すべての点において完全に満足できるものではなかった。
本開示は、任意好適な環境において実装される、様々なストリームプロセッサ態様を提供する。一例示用態様は、画像フレームを処理するための方法を提供する。いくつかの態様は、画像フレームに関連するカーネルパターンを定義し、定義されたカーネルパターンを用いて画像フレームを処理すること含む。様々な実装形態において、画像フレームに関連するカーネルパターンを定義することは、画像フレームに関連するカーネルブロックを定義すること、画像フレームに関連するカーネル記述子を定義すること、および画像フレームに関連するリンクテーブルを定義することを含む。この方法には、定義されたカーネルパターンに基づいて、カーネルスイッチルックアップテーブルを生成することをさらに含めてもよい。様々な実装形態において、画像フレームに関連するカーネルブロックを定義することは、処理中にそれに対して実施される同一のカーネルを有する、画像フレームのピクセルをグループ化することを含む。
様々な実装形態において、画像フレームに関連するカーネル記述子を定義することは、画像フレームの画像フレーム部分を定義すること、およびその画像フレーム部分に関連する、垂直記述子および水平記述子を定義することを含む。水平記述子は、水平方向において、画像フレーム部分に関連するカーネルを定義し、画像フレーム部分に関連するカーネル幅を定義し、かつ/または画像フレーム部分に関連するループ特性を定義することができる。
垂直記述子は、垂直方向において、画像フレーム部分に関連するリンクテーブルを定義し、画像フレーム部分に関連するカーネル高さを定義し、かつ/または画像フレーム部分に関連するループ特性を定義することができる。様々な実装形態において、画像フレームと関連するリンクテーブルは、水平リンクテーブルおよび垂直リンクテーブルを含む。水平リンクテーブルは、水平方向におけるカーネル順序を定義し、垂直リンクテーブルは、垂直方向におけるカーネル順序を定義することができる。様々な実装形態において、定義されたカーネルパターンを用いて画像フレームを処理することは、画像フレームに関連する垂直リンクテーブルをフェッチすること、垂直リンクテーブルに関連する垂直記述子をフェッチすること、垂直記述子に関連する水平リンクテーブルをフェッチすること、水平リンクテーブルに関連する水平記述子をフェッチすること、および水平記述子に関連するカーネルをフェッチすることを含む。この処理には、カーネルを用いて、垂直記述子および水平記述子に関連する画像フレーム部分を処理することをさらに含めることができる。
態様によっては、非一時的(non-transitory)コンピュータ可読媒体には、処理システムの1つまたは2つ以上のプロセッサによって実行されると本明細書に記載の方法を実行させる、命令がコード化されている。態様によっては、装置はストリームコントローラを含む。様々な実装形態において、ストリームコントローラは、画像フレームに関連する、定義されたカーネルパターンを記憶するためのカーネル記憶メモリ、および定義されたカーネルパターンに関連するカーネルスイッチルックアップテーブルを記憶するためのカーネルルックアップテーブル(LUT)メモリを含む。様々な実装形態において、ストリームコントローラは、定義されたカーネルパターンおよびカーネルスイッチルックアップテーブルに従って、画像フレーム上の様々なカーネルの実行を指示する動作が可能である。
ストリームコントローラには、画像フレームに対して実施されるカーネルを記憶するための少なくとも2つのカーネルバッファをさらに含めることができる。態様によっては、当該装置は、ストリーム処理ユニットを含む画像プロセッサをさらに含み、この場合に、ストリームコントローラは、定義されたカーネルパターンに従ってカーネルを画像フレームに対して実行するように、ストリーム処理ユニットに指示する動作が可能である。態様によっては、当該装置は、定義されたカーネルパターンに基づいて、カーネルスイッチルックアップテーブルを生成する動作が可能なコンパイラをさらに含む。様々な実装形態において、当該装置は、本明細書において記載した方法を実施する。
本開示は、添付の図と合わせて読めば、以下の詳細な説明から最もよく理解される。なお、業界の標準的慣行に従って、様々な特徴は、実寸通りに描かれておらず、例証の目的だけに用いられていることを強調したい。実際に、様々な特徴の寸法は、考察を分かり易くするために、任意に拡大または縮小されていることがある。
図1Aは、本開示の様々な観点による、画像処理中の画像フレームに応用可能な、様々な例示的なカーネルパターンの概略ブロック図である。 図1Bは、本開示の様々な観点による、画像処理中の画像フレームに応用可能な、様々な例示的なカーネルパターンの概略ブロック図である。 図1Cは、本開示の様々な観点による、画像処理中の画像フレームに応用可能な、様々な例示的なカーネルパターンの概略ブロック図である。 図2は、本開示の様々な観点による、画像フレームを処理する画像プロセッサによって実現することのできる、画像フレームに対して実施されるカーネル(演算または計算)に関連するカーネルパターンを定義する例示的な方法のフローチャートである。 図3は、本開示の様々な観点による、図2の方法を実施することにより画像処理中に定義することのできる、画像フレームの例示的なカーネルパターンの概略ブロック図である。 図4は、本開示の様々な観点による、画像処理中の画像フレームに対して実施されるカーネルを定義する記述子ベースカーネル定義を実装するための例示的なアセンブラコードを提示する。 図5は、本開示の様々な観点による、画像処理中の画像フレームに対して実施されるカーネルを定義する記述子ベースカーネル定義を実装するための例示的なアセンブラコードを提示する。 図6は、本開示の様々な観点による、画像処理中の画像フレームに対して実施されるカーネルを定義する記述子ベースカーネル定義を実装するための例示的なアセンブラコードを提示する。 図7は、本開示の様々な観点による、画像フレームを処理するときに、画像プロセッサによって実装することのできる、図2の方法を使用して定義されるもののような、記述子ベースカーネル定義を使用して、画像フレームに対して実施しようとするカーネルをフェッチする例示的な方法のフローチャートである。 図8は、本開示の様々な観点による、画像処理用の例示的な画像プロセッサの概略ブロック図である。 図9は、本開示の様々な観点による、図8の画像プロセッサに実装することができる、例示的なストリームコントローラの概略ブロック図である。 図10は、本開示の様々な観点による、図8の画像プロセッサに実装することができる、例示的ストリームコントローラの概略ブロック図である。 図11は、本開示の様々な観点による、図9のストリームコントローラを実装することのできる、例示的なカメラの概略ブロック図である。
例示用態様の詳細な説明
以下の開示は、本開示の異なる特徴を実現するための、多数の異なる態様、または実施例を提示する。本開示を簡略化するために、構成要素および配設の具体例を以下に記載する。これらは、勿論のこと、例示にすぎず、限定を意図するものではない。さらに、本開示は、様々な実施例において参照番号および/または文字を繰り返すことがある。このような繰返しは、簡潔性と明瞭性のためであり、それ自体で、考察される様々な態様および/または構成の間の関係を要求するものではない。
図1A〜1Cは、本開示の様々な観点による、画像処理中に画像フレーム100に適用することのできる、様々なカーネルパターンの概略ブロック図である。図1A〜1Cは、本開示の発明概念をさらに良く理解する目的で、分かり易くするために簡略化されている。さらなる特徴を、画像フレーム100および関連するカーネルパターンに加えることが可能であり、また以下に示す特徴の一部は、画像フレーム100および関連するカーネルパターンのその他の態様において、置換または消去することができる。
図1Aは、画像処理中に画像フレーム100に適用することのできる、カーネルパターン110を示し、ここでカーネルパターン110は、カーネル0(K0)(例えば、バックグラウンドカーネル)、カーネル1(K1)、およびカーネル2(K2)を含む。K0、K1、およびK2は、カーネルパターン110に従って、画像フレーム100上で動作する。画像フレーム100は、水平ピクセルラインの群HL0、HL1、HL2、…HLNおよび垂直ピクセルラインの群VL0、VL1、VL2、…VLNに区画して、カーネルパターン110内部に様々なカーネル順序を定義することができる。例えば、x方向(または水平方向)において、画像フレーム100は、以下のようなカーネルパターン110のカーネル順序を定義するように区画することができる:
例えば、K0に従って処理される水平画像ラインの群HL0のような、第1の群の水平画像ライン;
例えば、カーネル順序内部でK1→K0が複数回、繰り返す、カーネル順序K0→K1→K0→K1→K0に従って処理される、水平画像ラインの群HL1のような、第2の群の水平画像ライン;
例えば、K0に従って処理される水平画像ラインの群HL2のような、第3の群の水平画像ライン;
例えば、カーネル順序内部で第1のK2→K0が複数回、繰り返す、カーネル順序K0→K2→K0→K2→K0に従って処理される、水平画像ラインの群HL3のような、第4の群の水平画像ライン;および
画像フレーム100が処理されるまで、以下同様である。
カーネルパターン110は、水平方向に定義される、カーネル順序間のループを含む。例えば、y方向(または垂直方向)において、画像フレーム100は、水平画像ラインによって定義されるカーネル順序のループを定義するように、例えば以下のように、区画することができる:
例えば、K0を連続的にループ動作する垂直画像ラインの群VL0のような、第1の群の垂直画像ライン;
例えば、複数回繰り返す、ループカーネル順序K0→K1→K0→K2→K0を含む、垂直画像ラインの群VL1のような、第2の群の垂直画像ライン;
例えば、K0を連続的にループ動作する垂直画像ラインの群VL2のような、第3の群の垂直画像ライン;および
画像フレーム100が処理されるまで、以下同様である。
垂直方向において、上記のループは、画像処理要件に応じて複数回、ループ動作してもよい。
図1Bは、同様に、画像処理中に画像フレーム100に適用することのできる、カーネルパターン120を示し、ここでカーネルパターン120は、画像フレーム100に対して動作するためのK0,K1、K2、およびカーネル3(K3)を含む。画像フレーム100は、水平ピクセルラインの群HL0、HL1、HL2、…HLNおよび垂直ピクセルラインの群VL0、VL1、VL2、…VLNに区画して、カーネルパターン120内部に様々なカーネル順序を定義することができる。例えば、x方向(または水平方向)において、画像フレーム100は、カーネルパターン120の以下のカーネル順序を定義するように区画することができる:
例えば、K0に従って処理される水平画像ラインの群HL0などの、第1の群の水平画像ライン;
例えば、カーネル順序内部でK2→K0が複数回、繰り返すカーネル順序K0→K1→K0→K2→K0→K3→K0に従って処理される、水平画像ラインの群HL1および水平画像ラインの群HL3などの、第2の群の水平画像ライン;
例えば、カーネル順序K0→K1→K0→K3→K0に従って処理される、水平画像ラインの群HL2などの、第3の群の水平画像ライン;および
画像フレーム100が完全に処理されるまで、以後同様。
カーネルパターン120は、水平方向に定義された、カーネル順序の間にループを含む。例えば、y方向(または垂直方向)において、画像フレーム100は、水平画像ラインによって定義されるカーネル順序のループを定義するように、例えば以下のように、区画することができる:
例えば、K0を連続的にループ動作する、垂直画像ラインの群VL0のような、第1の群の垂直画像ライン;
例えば、第1のK1→K0が、カーネル順序内部で複数回、繰り返す、ループカーネル順序K0→K1→K0→K1→K0を含む、垂直画像ラインの群VL1のような、第2の群の垂直画像ライン;
例えば、K0を連続的にループ動作する、垂直画像ラインの群VL2のような、第3の群の垂直画像ライン;
カーネル順序内部で第1のK2→K0が複数回、繰り返す、ループカーネル順序K0→K2→K0→K2→K0を含む、垂直画像ラインの群VL3のような、第4の群の垂直画像ライン;
例えば、カーネル順序内部で第1のK3→K0が複数回、繰り返す、ループカーネル順序K0→K3→K0→K3→K0を含む、垂直画像ラインの群VLN−1のような、第N−1群の垂直画像ライン;および
画像フレーム100が処理されるまで、以下同様。
垂直方向において、上記ループは、画像処理要件に応じて複数回、ループ動作してもよい。
図1Cは、同様に、画像処理中に画像フレーム100に適用することのできる、カーネルパターン130を示し、ここでカーネルパターン130は、画像フレーム100に対して動作するためのK0,K1、K2、およびK3を含む。画像フレーム100は、水平ピクセルラインの群HL0、HL1、HL2、HL3、HL4、HL5、およびHL6、および垂直ピクセルラインの群VL0、VL1、VL2、VL3、VL4、VL5、およびVL6に区画して、カーネルパターン130内部に様々なカーネル順序を定義することができる。例えば、x方向(または水平方向)において、画像フレーム100は、カーネルパターン130の以下のカーネル順序を定義するように区画することができる:
例えば、K0に従って処理される、水平画像ラインの群HL0および水平画像ラインの群HL6のような、第1の群の水平画像ライン;
例えば、カーネル順序K0→K1→K0→K2→K0→K1→K0に従って処理される、水平画像ラインの群HL1および水平画像ラインの群HL5のような、第2の群の水平画像ライン;
例えば、K0に従って処理される、水平画像ラインの群HL2および水平画像ラインの群HL5のような、第3の群の水平画像ライン;および
画像フレーム100が完全に処理されるまで、以下同様。
カーネルパターン130は、水平方向に定義された、カーネル順序の間にループを含む。例えば、y方向(または垂直方向)において、画像フレーム100は、水平画像ラインによって定義されるカーネル順序のループを定義するように、例えば以下のように、区画することができる:
例えば、K0を連続的にループ動作する、垂直画像ラインの群VL0および垂直画像ラインの群VL6のような、第1の群の垂直画像ライン;
例えば、ループカーネル順序K0→K1→K0→K3→K0→K1→K0を含む、垂直画像ラインの群VL1および垂直画像ラインの群VL5のような、第2の群の垂直画像ライン;
例えば、K0を連続的にループ動作する、垂直画像ラインの群VL2および垂直画像ラインの群VL4のような、第3の群の垂直画像ライン;
例えば、ループカーネル順序K0→K2→K0→K3→K0→K2→K0を含む、垂直画像ラインの群VL3のような、第4の群の垂直画像ライン;および
画像フレーム100が処理されるまで、以下同様。
垂直方向において、上記ループは、画像処理要件に応じて、複数回、ループ動作をしてもよい。
図1A〜1Cにおけるカーネルパターンにより証明されるように、画像フレーム100などの、画像フレームに対して実施されるカーネル演算は、画像処理要件に応じて、大幅に変化させることができる。さらに強力で、動的な、かつ効率的な画像処理を提供するように進化を続ける画像センサデバイス(例えば、ディジタルカメラ)に対して、そのような画像センサデバイスは、様々な画像フレームに対して実施されるカーネル演算などの、画像処理要件を変化させる能力を必要とする。画像センサデバイスに実装された、従来のストリーム画像プロセッサは、2つの問題:(1)1つの画像フレームに対して2つ以上のカーネルを適用できないこと、または(2)1つの画像フレームに対して複数のカーネルを適用するための追加のハードウェアを必要とすること、のうちの一方に問題があり、この場合に、そのようなハードウェアは、カーネルをスイッチングするときにデータを見失うことが多い。
前述のもののような、現行の画像処理装置および方法の様々な短所に対処するために、本開示は、画像フレームのカーネルパターンを定義する方法、ならびに画像処理用の定義されたカーネルパターンを実現するための、画像プロセッサおよび関連するストリームコントローラを提供する。本明細書に記載の記述子ベースカーネル定義方法を実施することによって、(本明細書において開示するストリームコントローラを実装する)画像プロセッサは、複数カーネルを用いて画像フレームをシームレスに処理することが可能であり、この場合に、画像フレームを処理するのに使用されるカーネルの数は、メモリサイズだけによって制限される。
図2は、本開示の様々な観点による、画像フレームを処理する画像プロセッサによって実現することのできる、画像フレームに対して実施されるカーネル(演算)に関連するカーネルパターンを定義する方法200のフローチャートである。以下に詳細に述べるように、方法200は、カーネルブロック(複数を含む)、カーネル記述子(複数を含む)、および画像フレーム上で実行される様々なカーネルを識別する、リンクテーブル(複数を含む)を定義することによって、カーネルパターンを定義する。図3は、本開示の様々な観点による、図2の方法200を実施することにより画像処理中に定義することのできる、画像フレーム310のカーネルパターン300の概略ブロック図である。図2および図3は、本開示の発明概念がさらに良く理解されるように、同時に考察されるとともに、分かり易くするために簡略化されている。方法200の前、その間、その後に追加のステップを設けるとともに、方法200のその他の態様に対して、記載したステップの一部を置換または消去することができる。さらに、追加の特徴を、カーネルパターン300および画像フレーム310に追加することができるとともに、カーネルパターン300および画像フレーム310のその他の態様において、以下に記載する特徴の一部を置換、または消去することができる。
方法200は、画像フレーム310などの画像フレームに関連する、カーネルブロック(複数を含む)を定義することによって、ブロック210で始まる。カーネルブロック(複数を含む)を定義するステップは、カーネルブロックが、同一のカーネル(演算または計算)がそれに対して実施される、画像フレームの1つまたは2つ以上のピクセルを含むように、画像ピクセルに対して実施されるカーネル(演算)に応じて、画像ピクセルをグループ化する。カーネルは、画像ピクセルに対して実施されるすべての演算を含む(例えば、ADD、SUBTRACT、LOAD、STORE、その他の演算、またはそれらの組合せ、および/または画像フレーム310を処理するためのパイプラインステージ情報などの、画像処理用に実施されるカーネル演算を指定する、関連する算術論理ユニット(ALU)コードおよびメモリ(MEM)演算コード(オペレーションコード(opcodes)を含む)。例えば、図3において、3つの異なるカーネル演算を、画像フレーム310に対して実行することが可能であり(カーネル0(K0)、カーネル1(K1)、およびカーネル2(K2))、画像フレーム310は、K0に関連するカーネルブロック320、K1に関連するカーネルブロック325、およびK2に関連するカーネルブロック330を定義するように区画される。画像フレーム310の処理中に、K0は、カーネルブロック320に含まれる画像フレーム310のピクセルに対して実施され、K1は、カーネルブロック325に含まれる画像フレーム310のピクセルに対して実施され、K2は、カーネルブロック330に含まれる画像フレーム310のピクセルに対して実施される。
当該方法は、画像フレームに関連するカーネル記述子(複数を含む)を定義することによって、ブロック220へと続く。カーネル記述子は、画像フレームに適用される、カーネル演算順序を示し、カーネルパターン300をさらに定義する。本例においては、画像フレーム310は、水平ピクセルラインの群HL0、HL1、HL2,…HLN、および垂直ラインの群VL0、VL1、VL2、…VLNに区画されて、画像フレーム部分を定義し、この場合に各画像フレーム部分は、関連するカーネル記述子を有する。本例においては、画像フレーム310は、類似の画像フレーム部分が同一カーネル記述子を有するように、類似の画像フレーム部分を定義するように区画することができる。カーネル記述子は、水平記述子(HDES)および垂直記述子(VDES)を含み、それに応じて、各画像フレーム部分は、関連する水平記述子および関連する垂直記述子を有する。
水平記述子は、水平方向において、それに関連する画像フレーム部分の様々なカーネル属性、例えば、(K0、K1、またはK2などの関連する画像フレーム部分に対して動作するカーネルを定義する)カーネルID、(画像フレーム部分に関連するカーネルの水平ピクセル幅を定義する)カーネル幅、(関連する画像フレーム部分が、水平方向においてループスタート、ループエンド、またはループなしであるかどうかを定義する)ループフラグ、(関連する画像フレーム部分が、水平方向にループエンドであるときに定義される)ループ数、水平方向において画像フレーム部分を記述する上で有用なその他情報、またはそれらの組合せを定義する。垂直記述子は、垂直方向においてそれに関連する画像フレーム部分の様々なカーネル属性、例えば、HLINK ID(以下に詳細に記述する、水平ピクセルライン群に関連する水平リンクテーブル)、(HLINK IDに関連するカーネルを実行するための、水平ピクセルライン群内部での水平ピクセルラインの数を定義する)カーネル高さ、(関連する画像フレーム部分が、垂直方向においてループスタート、ループエンド、またはループなしであるどうかを定義する)ループフラグ、(関連する画像フレーム部分が垂直方向においてループエンドであるときに定義される)ループ数、垂直方向において画像フレーム部分を記述するのに有用なその他の情報、またはそれらの組合せを定義する。
図3において、画像フレーム310は、水平記述子HDES0、HDES1、HDES2、HDES3、HDES4、およびHDES5、ならびに垂直記述子VDES0、VDES1、VDES2、VDES3、VDES4、およびVDES5によって定義することのできる画像フレーム部分を含む。代替的態様は、水平記述子と垂直記述子の様々な組合せを使用して、画像フレーム部分を定義することができる。本例においては、水平記述子HDES0、HDES2、HDES3、HDES4、およびHDES5は、画像処理のためにK0によって処理される画像フレーム部分を表わし、この場合に、水平記述子HDES0、HDES2、HDES3、HDES4、およびHDES5はカーネル順序内部で多様なカーネル幅および位置を有し;水平記述子HDES1は画像処理のためにK1によって処理される画像フレーム部分を表わし;水平記述子HDES4は画像処理のためにK2によって処理される画像フレーム部分を表わす。
垂直記述子VDES0、VDES1、VDES2、VDES3、およびVDES4は、異なるカーネル順序を有する水平ピクセルライン群を表わす。例えば、VDES0、VDES2、およびVDES4は水平ピクセルライン群を表わし、この場合にK0は画像処理のための単独カーネル演算であり、垂直記述子VDES0、VDES2、およびVDES4は、カーネル順序内部で多様なカーネル高さおよび位置を有し;垂直記述子VDES1は、カーネル演算順序が、画像処理のための交互するK0およびK1カーネル演算を含む、水平ピクセルライン群を表わし、垂直記述子VDES3は、カーネル演算順序が、画像処理のための交互するK0およびK2カーネル演算を含む、水平ピクセルライン群を表わす。
当該方法は、画像フレームに関連するリンクテーブル(複数を含む)を定義することによって、ブロック230につながる。リンクテーブル(複数を含む)は、画像フレーム310の定義されたカーネルパターン300に存在する、水平記述子順序および垂直記述子順序を定義する。本例においては、リンクテーブルは、水平リンクテーブル(HLINK)および垂直リンクテーブル(VLINK)を含む。水平リンクテーブルは、画像フレーム310が多数の関連する水平リンクテーブルを有するように、水平ピクセルラインの群の水平画像記述子を収集する。例えば、図3において、画像フレーム310は少なくとも3つの関連する水平リンクテーブルを有することができる:
HLINK0: HDES5
HLINK1: HDES0→HDES1→HDES2→HDES3
HLINK2: HDES0→HDES4→HDES2→HDES3
ここで、HLINK1に対して、HDES1はループスタートであって、HDES2はループエンドであり、HLINK2に対して、HDES4はループスタートであって、HDES2はループエンドである。
本例においては、水平ピクセルライン群0(HL0)、水平ピクセルライン群2(HL2)、水平ピクセルライン群4(HL4)、水平ピクセルライン群6(HL6)、および水平ピクセルライン群N(HLN)に対する、カーネル演算順序は同一であるので、HL0、HL2、HL4、HL6、およびHLNは、同一の水平リンクテーブル、特にHLINK0を用いて処理することができる。同様に、水平ピクセルライン群1(HL1)、水平ピクセルライン群5(HL5)、その他用のカーネル演算順序はまったく同じであるので、HL1、HL5、およびその他類似の水平ライン群は、同一の水平リンクテーブル、特にHLINK1を用いて処理することができる。同様に、水平ピクセルライン群2(HL2)、水平ピクセルライン群6(HL6)、その他に対する、カーネル演算順序は同一であるので、HL2、HL6、およびその他の類似の水平ラインは、同一の水平リンクテーブル、特にHLINK2を用いて処理することができる。
水平リンクテーブルの数は、したがって、画像フレーム310のカーネルパターン300により定義される、水平カーネル演算順序の数と等価にすることができる。対象的に、垂直リンクテーブルは、本例において、画像フレーム310が、1つの関連する垂直リンクテーブルを有するように、画像フレーム全体に対する垂直記述子を収集する。図3において、画像フレーム310に関連する、垂直リンクテーブルは、次のようにすることができる:

VLINK:VDES0→VDES1→VDES2→VDES3→VDES4→VDES0

ここで、VDES0はループスタートであり、VDES4はループエンドである。
当該方法は、カーネルブロック(複数を含む)、カーネル記述子(複数を含む)、およびリンクテーブル(複数を含む)を用いて画像フレームを処理することによって、ブロック240へと続く。本例においては、図4〜6は、本開示の様々な観点による、例えば、画像フレーム310に対して実施される(カーネルパターン300によって定義される)カーネルなどの、画像処理中に画像フレームに対して実施されるカーネルを定義するために、(ブロック210、220、および230において定義されたもののような)記述子ベースカーネル定義を実装するための、例示的なアセンブラコードを提示する。図4は、本開示の様々な観点による、例えば、カーネルパターン300に関連するカーネル0(K0)などの、カーネルを定義するための例示的なカーネルアセンブラコードを提示する。
図5は、本開示の様々な観点による、例えば、画像フレーム310を処理するためのカーネルパターン300に関連する水平記述子および垂直記述子などの、画像フレームを処理するためのカーネルパターンに関連する水平記述子および垂直記述子を定義するための、例示的なアセンブラコード提示する。図6は、本開示の様々な観点による、例えば、画像フレーム310を処理するためのカーネルパターン300に関連する水平リンクテーブルおよび垂直リンクテーブルなどの、画像フレームを処理するためのカーネルパターンに関連する水平リンクテーブルおよび垂直リンクテーブルを定義するための、例示的なアセンブラコードを提示する。図4〜6におけるアセンブラコードは、本開示の発明概念をより良く理解する目的で、分かり易くするために簡略化されており、本開示によって様々な態様を提供するために、図4〜6に示されたアセンブラコードの変形形態が企図されるものである。さらに、以下の考察は、記述子ベースカーネル定義を表現するための、例示的なアセンブラコードを提示するが、本開示は、記述子ベースカーネル定義を表現するために、様々なプログラミング言語を使用することを意図し、例示の目的でアセンブラコードを提示するものである。
図4において、例示的なカーネルアセンブラコードは、K0を定義することができる。このカーネルアセンブラコードは、(カーネル演算を定義する)Kernel IndexまたはID、画像処理のためのパイプラインステージ数(PL_NUM NUM)、ALUパイプラインステージ情報、演算コード、その他のカーネル情報、またはそれらの組合せを示す。図5において、例示的アセンブラコードは、画像フレーム310に関連する、水平記述子HDES0、HDES1、HDES4、およびHDES5、ならびに垂直記述子VDES0、VDES1、およびVDES3を定義する。水平記述子アセンブラコードは、水平記述子と関連するカーネル、カーネル幅、水平記述子がループスタート、ループエンド、ループなしのいずれに関連するか、その他の水平記述子情報、またはそれらの組合せを示す。垂直記述子アセンブラコードは、垂直記述子と関連する水平リンクテーブル、カーネル高さ、垂直記述子がループスタート、ループエンド、ループなしのいずれであるか、その他の垂直記述子情報、またはそれらの組合せを示す。
一例において、このアセンブラコードは、次のことを示すことができる:水平記述子HDES0は、K0(カーネル0)、約50のカーネル幅、およびループなし(0)に関連すること;水平記述子HDES1は、K1(カーネル1)、約200のカーネル幅、およびループスタート(1)に関連すること;水平記述子HDES4は、K2(カーネル2)、約200のカーネル幅、およびループエンド(2)に関連すること;垂直記述子VDES0は、水平リンクテーブルHLINK0(HDES_LINK0)、約32のカーネル高さ、およびループなし(0)に関連すること;垂直記述子VDES1は、水平リンクテーブルHLINK1(HDES_LINK1)、約80のカーネル幅、およびループスタート(1)に関連すること、および垂直記述子VDES4は、水平リンクテーブルHLINK2(HDES_LINK2)、約50のカーネル幅、およびループエンド(2)に関連することである。
同様に、アセンブラコードは、水平記述子HDES2、HDES3、およびHDES5、ならびに垂直記述子VDES2、およびVDES4をさらに定義することができる。図6において、例示的なアセンブラコードは、画像フレーム310に関連する、水平リンクテーブルおよび垂直リンクテーブル定義する。例えば、このアセンブラコードは、画像フレーム310に関連する、水平リンクテーブルHLINK0、HLINK1、およびHLINK2、ならびに画像フレーム310に関連する垂直リンクテーブルVLINKを定義することができる。図示した例において、アセンブラコードは、画像フレーム310に関連するカーネル記述子に対する、水平スタート場所(H_START location)および垂直スタート場所(V_START location)を示す。
図7は、本開示の様々な観点による、例えば、方法200のブロック240におけるように、画像フレームを処理するときに、画像プロセッサによって実装することのできる、画像フレームに対して実施されるカーネル(演算)をフェッチするための方法400のフローチャートである。図7は、本開示の発明概念をさらに良く理解する目的で、分かり易くするために簡略化されている。方法400のカーネルフェッチング順序は、例えば、画像フレーム310に対して実施されるカーネルパターン300などの、画像フレームに対して実施されるカーネルパターンを定義する、(上述のような)カーネルブロック(複数を含む)、カーネル記述子(複数を含む)、およびリンクテーブル(複数を含む)を使用する。方法400は、垂直リンク(VLINK)テーブルをフェッチすることにより、例えば垂直リンクテーブルアドレスをフェッチすることによって、ブロック410で始まる。一例においては、画像フレーム310に関連するカーネルパターン300を参照して、方法400は、画像フレーム310に関連するVLINKテーブルのアドレスをフェッチすることによって始めることができる。
方法400は、VLINKテーブルを解析して、VLINKテーブルに関連する垂直記述子(VDES)をフェッチすることによって(特に、VDESに関連するアドレスをフェッチすることによって)、ブロック420に続く。例えば、画像フレーム310に対して、(図6においてアセンブラコードによって定義された例示的VLINKテーブルなどの)VLINKテーブルを解析すると、VDES0が、VLINKテーブルに関連する第1の垂直記述子であり、そのためにカーネルフェッチング順序が、VDES0用のアドレスのフェッチへと進む。次いで、ブロック430における方法400は、垂直記述子を解析して、その垂直記述子に関連する、水平リンク(HLINK)テーブルをフェッチする(特に、そのHLINKテーブルに関連するアドレスをフェッチする)。例えば、VDES0は、(図5における例示的な垂直記述子アセンブラコードによって指定された)HLINK0と関連しているので、方法400は、HLINK0テーブルのアドレスをフェッチする。
次いで、当該方法は、HLINKテーブルを解析し、HLINKテーブルに関連する水平記述子(HDES)をフェッチすること(特に、HDESに関連するアドレスをフェッチすること)によって、ブロック440に続く。本例においては、HLINK0は、HDES5がHLINK0に関連する第1の、かつ唯一の水平記述子であることを示し、そのために方法400はHDES5のアドレスをフェッチする。ブロック450において、方法400は、水平記述子を解析して、水平記述子に関連するカーネルを特定し、次いで、水平記述子に関連するカーネルをフェッチする(特に、カーネルに関連するアドレスをフェッチする)。例えば、カーネル0(K0)は、(図5における例示的な水平記述子アセンブラコードによって定義されるように)HDES5と関連しており、したがって方法400はK0をフェッチする。一例において、方法400は、メモリからK0をロードして、その後に、K0は、対応する垂直記述子および水平記述子、具体的には垂直記述子VDES0および水平記述子HDES5によって指定された、画像フレーム310の部分に対して動作する。
画像フレーム310の部分が処理されると、方法400は、ブロック430において解析されたHLINKテーブルに関連する追加の水平記述子があるかどうかに応じて、ブロック420またはブロック430に戻る。本例において、HLINK0は、単独の関連水平記述子HDES5を含む。したがって、画像フレーム310を処理するために、方法400は、VLINKテーブルを解析して、そのVLINKテーブルに関連する次の垂直記述子(VDES)をフェッチすることによってブロック420へと続く。例えば、画像フレーム310に対して、(図6における例示的なVLINKテーブルアセンブラコードなどの)VLINKテーブルを解析すると、VDES1が次の垂直記述子であることを示し、したがってカーネルフェッチ順序は、VDES1に対するアドレスのフェッチングへと進む。次いで、ブロック430における方法400は、次の垂直記述子を解析して、次の垂直記述子に関連する水平リンクテーブル(HLINK)をフェッチする。
例えば、VDES1は、(図5における例示的垂直記述子アセンブラコードによって指定される)HLINK1テーブルと関連しているので、方法400はHLINK1テーブルのアドレスをフェッチする。次いで、当該方法は、HLINKテーブルを解析し、そのHLINKテーブルに関連する水平記述子(HDES)をフェッチすることによって、ブロック440に続く。本例において、HLINK1は、水平記述子HDES0がHLINK1テーブルに関連する第1の水平記述子であることを示しており、したがって方法400はHDES0のアドレスをフェッチする。ブロック450において、方法400は、水平記述子を解析して、水平記述子に関連するカーネルを特定し、次いで、その水平記述子に関連するカーネルをフェッチする(特に、カーネルに関連するアドレスをフェッチする)。例えば、カーネル0(K9)は、(図5における例示的な水平記述子アセンブラコードによって定義されるように)HDES0と関連しており、したがって方法400はK0をフェッチする。
一例において、方法400はメモリからK0をロードして、その後にK0は、その対応する垂直記述子および水平記述子、垂直記述子VDES1ならびに水平記述子HDES0によって指定される、画像フレーム310の部分に対して動作する。HLINK1テーブルは、水平記述子HDES1、HDES2、およびHDES3をさらに含むので、方法400は、例えば、記述子VDES1およびHDES1に関連する画像フレーム部分、記述子VDES1およびHDES2に関連する画像フレーム部分、ならびに記述子VDES1およびHDES3に関連する画像フレーム部分などの、画像フレーム310の部分が、対応する垂直記述子および水平記述子によって処理されるまで、ブロック430からブロック450までを繰り返すことができる。次いで、ブロック420からブロック450までのフェッチ順序が、例えば、画像フレーム310などの、画像フレームが定義されたカーネルによって処理されるまで、繰り返される。追加のステップを、方法400の前、その途中、その後に設けることが可能であり、記述したステップの一部を、方法400のその他の態様に対して、置換または消去することができる。
図8は、本開示の様々な観点による、画像処理用の画像プロセッサ500の概略ブロック図である。図示した態様においては、画像プロセッサ500は、ストリーム画像プロセッサとして構成されている。ストリーム画像プロセッサは、画像処理アプリケーションを、画像データストリームに対して動作する一組の計算カーネル中に配設する。図8は、本開示の発明概念をさらに良く理解するために分かり易くする目的で簡略化されている。追加の特徴を、画像プロセッサ500に追加することが可能であり、以下に記載する特徴の一部は、画像信号プロセッサ500のその他の態様において置換または消去することができる。
画像プロセッサ500には、プログラムメモリ510、ホストプロセッサ515、およびストリーム処理ユニット520と組み合わされる、ストリームコントローラ505を含めることができる。ストリームコントローラ505は、(それに限定はされないが、画像、ビデオ、オーディオ、またはその他のデータタイプを含む)データに対するストリーミング動作の流れを制御することができる。ストリームコントローラ505は、ホストプロセッサ515からストリーム命令を受け取り(ホストプロセッサ515は、その命令をプログラムメモリ510からロードすることができる)、次いで、ストリームコントローラ505は、ストリーム処理ユニット520にそのような命令を出す。本例においては、ホストプロセッサ515は、画像処理のために画像フレームに対して実施されるカーネルに関連する命令を出して、ストリームコントローラ505は、画像フレームが、以下にさらに記述するように、カーネルを用いてストリーム処理ユニット520によって処理されるように、ストリーム処理ユニット520に対する命令を順序付ける。一例において、ストリームコントローラ505は、ホストプロセッサ515からの命令を受け付けて、その命令を記憶し、どの命令がストリーム処理ユニット520によって使用可能かを判定する。
ストリーム処理ユニット520には、マイクロコントローラ525、算術論理ユニット(ALU)ブロック530、ストリームレジスタファイル535、およびストリームメモリ540を含めることができる。マイクロコントローラ525は、ALUクラスタがデータのストリームに対してカーネル演算を実施するように、ALUブロック530、特に、ALUブロック530のALUクラスタ1、ALUクラスタ2、…ALUクラスタN(ここで、NはALUクラスタの合計数)を制御する。本例においては、ALUクラスタ1、ALUクラスタ2、…ALUクラスタNは、画像データのストリームに対するカーネル演算を実施する。ALUクラスタは、単独命令、複数データ方式で動作することが可能であり、この場合に同一の命令が、データストリームの異なる要素に対して、ALUクラスタによって実行される。一例において、ALUクラスタ1、ALUクラスタ2、…ALUクラスタNは、少なくとも1つのALUおよび少なくとも1つのローカルレジスタファイルを含む。ストリームレジスタファイル535は、データストリームを記憶し、画像プロセッサ内部での、例えば、ALUブロック530とストリームメモリ540の間の、データストリームの転送を容易にすることができる。
図9は、本開示の様々な観点による、ストリームプロセッサ内に実装することのできる、ストリームコントローラ600の概略ブロック図である。一例において、ストリームコントローラ600は、図8の画像プロセッサ500のストリームコントローラ505として実装することができる。図9は、本開示の発明概念をさらに良く理解するために分かり易くする目的で簡略化されている。ストリームコントローラ600に追加の特徴を加えることができるとともに、以下に記述する特徴の一部は、ストリームコントローラ600のその他の態様において、置換または消去することができる。
ストリームコントローラ600は、コンパイラ602と協働して、データ処理のために、(例えば、図1〜8を参照して)本明細書に記載する、記述子ベースカーネル定義方法を実装する。ストリームコントローラ600が画像プロセッサ500のストリームコントローラ505として実装されている、本例においては、ストリームコントローラ600は、コンパイラ602と協働して、画像データを処理するための、一例ではカーネルパターン300による画像フレーム310を処理するための、記述子ベースカーネル定義を実装する。コンパイラ602は、画像プロセッサ500のプログラムメモリ510に記憶させることができる、画像プロセッサ500において実行可能な画像処理プログラムとすることができる。本例においては、コンパイラ602は、画像データに対して実施されるカーネル演算を定義するプログラム言語をコンパイルする。例えば、コンパイラ602は、(図4〜6を参照して記述された、例示的なアセンブラコードのような)画像フレーム310に対して実施されるカーネルを定義するアセンブラコードをコンパイルして、カーネルパターン300に従って画像フレーム310を処理するための2値コードを生成する。コンパイラ602はまた、プログラム言語によって定義されたカーネルに基づいてカーネルスイッチルックアップテーブル(LUT)を生成する。一例において、コンパイラ602は、アセンブラコードによって定義される水平リンクテーブルに関連するカーネル定義に基づいて、カーネルスイッチLUTを生成する。
ストリームコントローラ600は、カーネル記憶メモリ605を含む。カーネル記憶メモリ605は、データに対して実施されるカーネル演算に関連する情報、例えばカーネル情報、カーネル記述子情報、カーネルパターン情報、その他のカーネル情報、またはそれらの組合せなどを記憶する。一例において、カーネル記憶メモリ605は、データに対して実施されるカーネル演算を定義する2値カーネルコードを記憶する。例えば、カーネルパターン300に従って処理画像フレーム310を処理するとき、カーネル記憶メモリ605は、カーネルK0、K1、およびK2を定義する2値カーネルコード、ならびにカーネルK0、K1、およびK2に関連するカーネルパターン300を記憶する。一例において、(画像プロセッサ500のホストプロセッサ515などの)ホストプロセッサは、コンパイラ602によって生成されたカーネル2値コードをカーネル記憶メモリ605中に記憶する。
ストリームコントローラ600はまた、カーネルスイッチルックアップテーブル(LUT)メモリ610を含む。カーネルスイッチLUTメモリ610は、例えば、コンパイラ602によって生成されるカーネルスイッチLUTなどの、データに対して実施されるカーネル演算に関連する、カーネルルックアップテーブルを記憶する。図10は、本開示の様々な態様による、記述子ベースカーネル定義に基づき、コンパイラによって生成することのできる、例示的なカーネルスイッチLUTを示す。図10において、例示的なカーネルスイッチLUTは、カーネル0(K0)からカーネル1(K1)へとスイッチする。カーネルスイッチが行われるとき、ストリーム処理ユニット520のすべてのALU(例えば、ALUブロック530のALU)が、K0またはK1を実行中である。ALUはパイプライン動作において動作するので、第1のクロックサイクルにおいて、2つのカーネルスイッチングが発生し、この場合に、ALU1はK0からK1にスイッチし、同時にALU9は、(例えば、K0より前のカーネルなどの)先のカーネルからK0へとスイッチし;第2のクロックサイクルにおいて、ALU2はK0をK1へスイッチし、同時にALU10は先のカーネルからK0にスイッチし;第3のクロックサイクルにおいて、ALU3はK0からK1へスイッチし、同時にALU11は、先のカーネルからK0へとスイッチし;後続のクロックサイクルにおいて以下同様である。各クロックサイクルにおいて、ストリームコントローラ600は、実行のために、カーネルスイッチLUT中にスイッチを記録する。カーネルスイッチLUTを生成し、画像処理中にそのカーネルスイッチLUTを更新することによって、ストリームコントローラ600は、カーネル境界においてデータを失うことなく、カーネルパイプライン更新を容易化する。
ストリームコントローラ600には、メモリインターフェイス615、ストリームコントローラマネジャ620、ストリームコントローラ有限状態マシン(FSM)カーネル/LUTフェッチングユニット625、およびストリームコントローラ命令制御ユニット630をさらに含めることができる。メモリインターフェイス615は、メモリ読出しおよびメモリ書込み動作、例えば、カーネル記憶メモリ605およびカーネルスイッチLUTメモリ610へ/からのメモリ読出しおよびメモリ書込みを制御する。ストリームコントローラマネジャ620、FSMカーネル/LUTフェッチユニット625、およびストリームコントローラ命令制御ユニット630は、ストリームコントローラ600および/または画像プロセッサ500の処理要件に基づいて、画像処理用のメモリから、カーネルを動的にロードして更新するように設計され、構成されている。ストリームコントローラ600は、このように、様々な画像処理要件を容易化することができる。
動作中に、ストリームコントローラ600は、例えば、垂直記述子(VD)入力信号および水平記述子(HD)入力信号などの、入力信号を受け取る。VD入力信号は、画像フレーム開始フラグを表わし、HD入力信号は画像ピクセルライン開始フラグを表わす。VD入力信号およびHD入力信号は、カウンタ635によって、垂直カウンタ信号(VCNT)および水平カウンタ信号(HCNT)をそれぞれ発生するのに使用され、それによってストリームコントローラ600は、垂直方向と水平方向の両方において、カーネルスイッチ境界(ここで、カーネルスイッチ境界は、画像プロセッサ500が、画像フレームを処理する間に(例えば、K0からK1へのように)1つのカーネルから別のカーネルに変わる場所である)を特定することが可能であり、カーネル更新コントローラ640は、上記で考察したようにカーネルスイッチLUTを更新することができる。
ストリームコントローラ600は、バンクAカーネルバッファ645およびバンクBカーネルバッファ650を、さらに含む。バンクAカーネルバッファ645およびバンクBカーネルバッファ650は、画像処理中のシームレスなカーネルスイッチングをサポートする。例えば、動作において、ストリーム処理ユニット520がバンクAカーネルバッファ645によって記憶されたカーネルを実行する間に、ストリームコントローラ600は、実行のために次のカーネルをフェッチして、次のカーネルをバンクBカーネルバッファ650に記憶することが可能であり、その逆も可能である。画像処理中に、カーネルバッファ645および650は、このように、前後にピンポン運動して(ping pong back and forth)、カーネルスイッチングをサポートするとともに、ストリーム処理ユニット520のALUが2つの隣接するカーネルを矛盾なく実行するのをさらにサポートする。2つの隣接するカーネルの実行をサポートすることによって、処理効率を向上させるとともに、ハードウェアコストおよびサイズを低減することができる(例えば、ストリーム処理ユニット520のALUSの数を低減することができる)。カーネルバッファ645および650は、パイプラインカーネルスイッチングLUTと協働して、シームレスなカーネルスイッチングを達成する。
このようにストリームコントローラ600は、処理効率を減少させることなく、またはハードウェアコストまたはオーバヘッドを増大させることなく、フレキシブルな多重カーネル画像処理を容易化し、サポートする。ストリームコントローラ600は、カーネル境界においてデータを失うことなく、カーネルスイッチングをさらに容易化する。対照的に、従来式のストリームプロセッサは、通常、同一のカーネルを用いて画像フレームを処理し、複数のカーネルを用いて画像フレームを処理する能力に欠ける。一部の従来型ストリームプロセッサは、画像フレームを画像処理する際のカーネルスイッチングをサポートすることができるが、そのようなカーネルスイッチングは、例えば、追加のALU、メモリ、その他の計算資源、またはそれらの組合せなどの、追加のコンピュータ資源を追加することによって達成されるものであり、それによってプロセッサ面積オーバヘッドおよびコストを不都合に増大させる。
図11は、本開示の様々な態様による、例えばディジタルカメラなどの、カメラ700の概略ブロック図である。カメラ700は、レンズ部分710、画像センサ部分720、フロントエンド部分730、およびバックエンド部分740を含む。一例において、フロントエンド部分730は、アナログ・ディジタル部分であり、バックエンド部分740はディジタル部分である。フロントエンド部分730には、相関する二重サンプラ(複数を含む)732、アナログ・ツー・ディジタルコンバータ(複数を含む)734、信号処理ユニット736(例えば、ディジタル信号プロセッサ)、およびプログラマブルタイミング発生器/画像センサドライバユニットを含めることができる。
バックエンド部分740は、画像信号プロセッサ750を含む。一例において、画像信号プロセッサ750は、ストリームコントローラ600、および本明細書において考察した(例えば、図1〜10を参照して記述した)、記述子ベースカーネル定義方法を実施するストリーム画像プロセッサである。バックエンド部分740には、縮小命令セットコンピュータ(RISC)プロセッサ752、ディジタル、アナログビデオユニット754、入出力(I/O)コントローラユニット756、JPEGおよび/またはMPEGエンコーダ/デコーダユニット758、およびメモリコントローラ760をさらに含めることができる。カメラ700には、レンズ、シャッター、フラッシュコントロールユニット770およびメモリユニット780(例えば、SDRAM、DDR、その他)をさらに含めることができる。図11は、本開示の発明概念をさらに良く理解するために分かり易くする目的で簡略化されている。追加の特徴をカメラ700に追加することが可能であるとともに、以下に記載する特徴の一部は、カメラ700のその他の態様においては、置換または除去することができる。
本明細書において概説した仕様、寸法、および関係は、例示と教示の目的でのみ提示したものである。これらのそれぞれは、本開示の趣旨、または添付の特許請求項の範囲から逸脱しない範囲で相当に変更してもよい。これらの仕様は、1つの非限定の実施例にのみ適用されものであり、したがってそのように解釈すべきである。前述の説明においては、例示用態様を、特定のプロセッサ配設を参照して説明した。添付の特許請求項の範囲から逸脱することなく、様々な修正および変更を、そのような態様に対して行ってもよい。したがって、説明および図面は、限定の意味ではなく、例証のためのものであるとみなすべきである。
先述の図を参照して記述した動作およびステップは、本明細書に記載した様々な装置、プロセッサ、デバイスおよび/またはシステムによって、またはその内部で実行できる、可能なシナリオの一部だけを示す。これらの動作の一部は、適当な場合には、消去または除去するか、またはステップは、考察した概念の範囲から逸脱することなく、相当に修正または変更してもよい。さらに、これらの動作のタイミングは、相当に改変して、その場合でも本開示で教示された結果を達成することができる。先述の動作フローは、例示と考察の目的で提示したものである。任意適当な配設、時間配列(chronologies)、構成、およびタイミングメカニズムを、考察した概念の教示から逸脱することなく提供できるという点で、実質的なフレキシビリティがシステムによって提供される。
例示用実装形態においては、本明細書において概説した処理活動(processing activities)の少なくとも一部分は、ソフトウェアに実装してもよい。態様によっては、これらの特徴の1つまたは2つ以上を、図1〜11の要素の外部に設けられるか、または意図する機能を達成するために適当な方法で連結された、ハードウェアに実装してもよい。様々な構成要素は、本明細書において概説した動作を達成するために協調することのできる、ソフトウェア(または往復ソフトウェア(reciprocating software))を含んでもよい。さらにその他の態様においては、これらの要素は、任意適当なアルゴリズム、ハードウェア、ソフトウェア、構成要素、モジュール、インターフェイス、またはその動作を容易化するオブジェクトを含んでもよい。
さらに、本明細書にそれぞれ記載した画像プロセッサ500、ストリームコントローラ600、およびカメラ700(および/またはその関連する構造)は、ネットワーク環境においてデータまたは情報を受信、送信、および/またはその他の方法で通信するための好適なインターフェイスも含んでもよい。さらに、記述したプロセッサに関連する構成要素の一部は、除去するか、または他の方法で連結してもよい。一般的には、図において示した配設は、その表現においてより論理的であってもよく、これに対して、物理的アーキテクチャは、様々な順列、組合せ、および/またはこれらの要素の混生物(hybrid)を含んでもよい。なお、本明細書において概説した動作目的を達成するのに、無数の可能な設計構成を使用することができることに留意されたい。したがって、関連するインフラストラクチャは、無数の代用配設、設計選択、デバイス可能性、ハードウェア構成、ソフトウェア実装、装備選択肢、その他を有する。
一部の例示用態様においては、1つまたは2つ以上のメモリ要素が、本明細書において記載した動作に使用されるデータを記憶することができる。これには、非一時的媒体において命令(例えば、ソフウェア、ロジック、コード、その他)を記憶し、その命令が実行されて、本明細書に記載した活動が実施されるようにすることのできるメモリ要素を含む。任意好適なプロセッサ構成要素が、本明細書において詳述した動作を達成するためのデータに関連する、任意の種類の命令を実行することができる。一例において、画像プロセッサ500、ストリームコントローラ600、およびカメラ700はそれぞれ、1つの状態または実体(state or thing)から別の状態または実体へと、要素または項目(例えば、データ)を変換することもできる。別の例においては、本明細書に概説した活動は、固定ロジックまたはプログラマブルロジック(例えば、プロセッサによって実行される、ソフトウェアおよび/またはコンピュータ命令)で実装してもよく、本明細書において識別される要素は、プログラマブルプロセッサ、プログラマブルディジタルロジック(例えば、フィールドプログラマブルゲートアレイ(FPGA)、消去可能プログラマブル読出し専用メモリ(EPROM)、電気的消去可能プログラマブル読出し専用メモリ(EEPROM))、ディジタル論理を含むASIC、ソフトウェア、コード、電子命令、フラッシュメモリ、光ディスク、CD−ROM、DVDROM、磁気または光学カード、電子命令を記憶するのに適した他のタイプの機械可読媒体、またはそれらの任意適切な組合せ、のいずれかのタイプとすることができる。
動作に際して、画像プロセッサ500および/またはストリームコントローラ600は、それぞれ、任意好適なタイプの非一時的記憶媒体(例えば、ランダムアクセスメモリ(RAM)、読出し専用メモリ(ROM)、フィールドプログラマブルゲートアレイ(FPGA)、消去可能プログラマブル読出し専用メモリ(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、その他)、ソフトウェア、ハードウェア、または適切な場合に、特定のニーズに基づいて、その他任意好適な構成要素、デバイス、要素、もしくはオブジェクトに、情報を保持してもよい。さらに、画像プロセッサ500、ストリームコントローラ600、およびカメラ700において追跡、送付、受信、または記憶されている情報は、特定のニーズおよび実装形態に基づいて、任意のデータベース、レジスタ、テーブル、キャッシュ、キュー、コントロールリスト、または記憶構造に提示してもよく、これらのすべては、任意適当な時間フレームにおいて参照することもできる。本明細書において考察したメモリアイテムはいずれも、広義の用語「メモリ」の範囲に包含されるものと解釈すべきである。同様に、本明細書において記述した潜在的な処理要素、モジュール、および機械はいずれも、広義の用語「プロセッサ」の範囲に包含されるものと解釈すべきである。
本明細書において記述した機能の全部または一部を実現するコンピュータプログラムロジックは、それには限定されないが、ソースコード形態、コンピュータ実行可能形態、および様々な中間形態(例えば、アセンブラ、コンパイラ、リンカー、またはロケータ)を含む、様々な形態に具現化される。一例において、ソースコードは、様々なオペレーティングシステムまたはオペレーティング環境での使用のための、例えば、オブジェクトコード、アセンブリ言語、または、例えばFortran、C、C++、JAVA(登録商標)、またはHTMLなどの高レベル言語などの、様々なプログラム言語に実装された一連のコンピュータプログラム命令を含む。ソースコードは、様々なデータ構造および通信メッセージを定義して使用してもよい。ソースコードは、(例えば、インタープリタを介して)コンピュータ実行可能形態であるか、またはソースコードは、コンピュータ実行可能形態に(例えば、トランスレータ、アセンブラ、またはコンパイラを介して)変換してもよい。
以上は、当業者が本開示の観点をより良く理解できるように、いくつかの態様の特徴を概説するものである。当業者は、本明細書において紹介した態様と同一の目的を実施すること、および/または同一の利点を達成するために、その他の工程および構造を設計または修正するための基礎として、本開示を容易に使用することができることを理解すべきである。当業者はまた、そのような均等な構築は、本開示の趣旨と範囲から逸脱するものではないこと、およびそれらに、本開示の趣旨と範囲から逸脱することなく、様々な変更、置換および改変を行ってもよいことも認識すべきである。
多数のその他の変更、置換、変形、改変、および修正を、当業者は把握することが可能であり、本開示は、そのようなすべての変更、置換、変形、改変、および修正を、添付の特許請求項の範囲に含めることを意図している。本明細書に添付された特許請求の範囲の解釈において、米国特許商標局(USPTO)および、さらには本出願に対して発行される任意の特許の読者を支援するために、出願人が、(a)特定の請求項において「〜する手段(means for)」または「〜のステップ(steps for)」の文言が特に使用されない限り、添付の請求項のいずれかに、35USCセクション112のパラグラフ(6)を、本明細書の出願日に存在する状態で、引き合い出す意図はないこと、および(b)明細書におけるいかなる文によっても、添付の特許請求の範囲に記載されないいかなる方法でも、本開示を限定する意図がないことを、出願人は注記しておきたい。
例示用態様の実装形態
特定の一例示用実装形態は、画像フレームに関連するカーネルパターンを定義する手段(例えば、ソフトウェア、ロジック、コード、ハードウェア、またはそれらの組合せ)、および定義されたカーネルパターンを用いて画像フレームを処理する手段を含んでもよい。様々な実装形態は、画像フレームに関連するカーネルブロックを定義し、画像フレームに関連するカーネル記述子を定義し、かつ画像フレームに関連するリンクテーブルを定義する手段をさらに含んでもよい。

Claims (21)

  1. プロセッサが複数のカーネル間で動的にスイッチすることができ、かつ、画像フレームに関連する2つまたは3つ以上の異なるカーネルパターンを適用することができるプロセッサを使用して、画像を処理する方法であって、
    画像フレームに関連する所望のカーネルパターンのうちの1つを定義すること、および
    前記定義されたカーネルパターンを用いて、前記画像フレームを処理すること
    を含み、
    画像フレームに関連するカーネルパターンを定義することは、
    カーネルパターンを定義するために複数のカーネルブロックを定義すること、該複数のカーネルブロックを定義することは、各カーネルブロックのために、同一のカーネルを有する画像フレームのピクセルをグループ化することを含み、ここにおいてそれぞれのカーネルは、それぞれのカーネルブロックにおけるピクセルの上で演算を実施するためのものであり、
    それぞれのカーネルのためにカーネル順序を特定するカーネル記述子を定義すること、および
    前記カーネル順序を記録するリンクテーブルを生成すること
    を含む、前記方法。
  2. 定義されたカーネルパターンに基づいて、カーネルスイッチルックアップテーブルを生成することをさらに含み、前記カーネルスイッチルックアップテーブルは、1つのカーネルから他のカーネルへとスイッチするためのものである、請求項1に記載の方法。
  3. 画像フレームに関連するカーネルパターンを定義するためにカーネルブロックを定義することが、ピクセルに対して画像処理中に実施される同一のカーネルを有する画像フレームのピクセルをグループ化することを含む、請求項に記載の方法。
  4. 画像フレームに関連するカーネル記述子を定義することが、
    前記画像レームの画像フレーム部分を定義すること、および
    前記画像フレーム部分に関連する、垂直記述子および水平記述子を定義すること
    を含む、請求項に記載の方法。
  5. 水平記述子を定義することが、水平方向において、
    画像フレーム部分に関連するカーネルを定義すること、
    前記画像フレーム部分に関連するカーネル幅を定義すること、および
    前記画像フレーム部分に関連する、ループフラグおよびループ数を含むループ特性を定義することを含む、請求項に記載の方法。
  6. 垂直記述子を定義することが、垂直方向において、
    画像フレーム部分に関連するリンクテーブルを定義すること
    前記画像フレーム部分に関連するカーネル高さを定義すること、および
    前記画像フレーム部分に関連する、ループフラグおよびループ数を含むループ特性を定義することを含む、請求項に記載の方法。
  7. 画像フレームに関連するリンクテーブルを生成することが、水平リンクテーブルおよび垂直リンクテーブルを定義することを含む、請求項に記載の方法。
  8. 水平リンクテーブルを定義することが、水平方向におけるカーネル順序を定義することを含む、請求項に記載の方法。
  9. 垂直リンクテーブルを定義することが、垂直方向におけるカーネル順序を定義することを含む、請求項に記載の方法。
  10. 定義されたカーネルパターンを用いて画像フレームを処理することが、
    前記画像フレームに関連するリンクテーブル、カーネル記述子およびカーネルをフェッチすることを含む、請求項1に記載の方法。
  11. 処理することが、
    カーネルを用いて、垂直記述子および水平記述子に関連する画像フレーム部分を処理することをさらに含み、ここで、
    垂直記述子を定義することが、垂直方向において、
    画像フレーム部分に関連するリンクテーブルを定義すること、
    前記画像フレーム部分に関連するカーネル高さを定義すること、および
    前記画像フレーム部分に関連する、ループフラグおよびループ数を含むループ特性を定義することを含み、
    水平記述子を定義することが、水平方向において、
    画像フレーム部分に関連するカーネルを定義すること、
    前記画像フレーム部分に関連するカーネル幅を定義すること、および
    前記画像フレーム部分に関連する、ループフラグおよびループ数を含むループ特性を定義することを含む、
    請求項10に記載の方法。
  12. プロセッサの1つまたは2つ以上のプロセッサによって実行されるときに、プロセッサが複数のカーネル間で動的にスイッチすることができ、かつ、画像フレームに関連する2つまたは3つ以上の異なるカーネルパターンを適用することができるプロセッサを使用して、画像を処理する方法を実行させる命令がコード化されている非一時的コンピュータ可読媒体であって、前記方法は、
    画像フレームに関連する所望のカーネルパターンの1つを定義すること、および
    定義されたカーネルパターンを使用して画像フレームを処理すること
    を含み、かつ、
    画像フレームに関連するカーネルパターンを定義することが、
    カーネルパターンを定義するために複数のカーネルブロックを定義すること、該複数のカーネルブロックを定義することは、各カーネルブロックのために、同一のカーネルを有する画像フレームのピクセルをグループ化することを含み、ここにおいてそれぞれのカーネルは、それぞれのカーネルブロックにおけるピクセルの上で演算を実施するためのものであり、
    それぞれのカーネルのためにカーネル順序を特定するカーネル記述子を定義すること、および
    前記カーネル順序を記録するリンクテーブルを生成すること
    を含むものである、前記非一時的コンピュータ可読媒体。
  13. 前記方法が、定義されたカーネルパターンに基づいてカーネルスイッチルックアップテーブルを生成することをさらに含み、前記カーネルスイッチルックアップテーブルは、1つのカーネルから他のカーネルへとスイッチするためのものである、請求項12に記載の非一時的コンピュータ可読媒体。
  14. 画像を処理することが、
    画像フレームに関連するリンクテーブル、カーネル記述子およびカーネルをフェッチすること、および
    前記カーネルを用いて画像フレームを処理すること
    を含む、請求項12に記載の非一時的コンピュータ可読媒体。
  15. 画像フレームに関連する複数の定義されたカーネルパターンを記憶するカーネル記憶メモリであって、カーネルパターンは、それぞれが画像ピクセルのグループを含み、かつ、グループにおける画像ピクセルに演算を実施するカーネルを有するカーネルブロック、および、それぞれのカーネルのためのカーネル順序を特定するカーネル記述子の定義を含む、前記カーネル記憶メモリ、および
    前記複数の定義されたカーネルパターンに関連するカーネルスイッチルックアップテーブルを記憶するカーネルルックアップテーブル(LUT)メモリであって、前記カーネルスイッチルックアップテーブルは、1つのカーネルから他のカーネルへとスイッチするためのものである、前記カーネルルックアップテーブルメモリ
    を含むストリームコントローラを含む、カーネルパターンを定義する複数のカーネル間で動的にスイッチすることによって画像を処理し、かつ、2つ以上の異なるカーネルパターンが該装置によって適用され得る装置であって、
    前記ストリームコントローラは、複数の記憶されたカーネルパターンおよびカーネルスイッチルックアップテーブルのうちから定義された、前記定義されたカーネルパターンおよび前記カーネルスイッチルックアップテーブルによる、画像フレームに対するカーネルの実行を指示する動作が可能である、前記装置。
  16. ストリームコントローラが、画像フレームに対して実施されるカーネルを記憶する、少なくとも2つのカーネルバッファをさらに含む、請求項15に記載の装置。
  17. ストリーム処理ユニットを含む画像プロセッサをさらに含み、ストリームコントローラが、ストリーム処理ユニットに、定義されたカーネルパターンに従って、画像フレームに対してカーネルを実行するように指示する動作が可能である、請求項15に記載の装置。
  18. 定義されたカーネルパターンに基づいて、カーネルスイッチルックアップテーブルを生成する動作が可能なコンパイラをさらに含む、請求項15に記載の装置。
  19. カーネル境界においてデータを失うことを防ぐために、画像処理中にカーネルスイッチルックアップテーブルを更新し、かつ、カーネルパイプラインを更新することをさらに含む、請求項3に記載の方法。
  20. カーネルが、画像ピクセルに実施される複数の演算を含む、請求項1〜11のいずれか一項に記載の方法。
  21. カーネル境界においてデータを失うことを防ぐために、画像処理中にカーネルスイッチルックアップテーブルを更新し、かつ、カーネルパイプラインを更新することをさらに含む、請求項12〜14のいずれか一項に記載の非一時的コンピュータ可読媒体。
JP2014011404A 2013-01-24 2014-01-24 画像処理用の記述子ベースストリームプロセッサおよびそれに関連する方法 Active JP5894614B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/749,675 2013-01-24
US13/749,675 US9241142B2 (en) 2013-01-24 2013-01-24 Descriptor-based stream processor for image processing and method associated therewith

Publications (3)

Publication Number Publication Date
JP2014142939A JP2014142939A (ja) 2014-08-07
JP2014142939A5 JP2014142939A5 (ja) 2014-10-16
JP5894614B2 true JP5894614B2 (ja) 2016-03-30

Family

ID=51207394

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014011404A Active JP5894614B2 (ja) 2013-01-24 2014-01-24 画像処理用の記述子ベースストリームプロセッサおよびそれに関連する方法

Country Status (2)

Country Link
US (1) US9241142B2 (ja)
JP (1) JP5894614B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102174192B1 (ko) * 2014-01-14 2020-11-04 에스케이하이닉스 주식회사 프로세서 기반의 타이밍 생성 장치 및 그 방법과 그를 이용한 씨모스 이미지 센서
US10387988B2 (en) * 2016-02-26 2019-08-20 Google Llc Compiler techniques for mapping program code to a high performance, power efficient, programmable image processing hardware platform
EP4201054A1 (en) * 2020-08-24 2023-06-28 Google LLC Lookup table processing and programming for camera image signal processing

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7158668B2 (en) * 2003-08-01 2007-01-02 Microsoft Corporation Image processing using linear light values and other image processing improvements
US20090077359A1 (en) * 2007-09-18 2009-03-19 Hari Chakravarthula Architecture re-utilizing computational blocks for processing of heterogeneous data streams
US7995845B2 (en) * 2008-01-30 2011-08-09 Qualcomm Incorporated Digital signal pattern detection and classification using kernel fusion
US8493407B2 (en) * 2009-09-03 2013-07-23 Nokia Corporation Method and apparatus for customizing map presentations based on user interests
PL3779979T3 (pl) * 2010-04-13 2024-01-15 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Sposób dekodowania audio do przetwarzania sygnałów audio stereo z wykorzystaniem zmiennego kierunku predykcji
US8885890B2 (en) * 2010-05-07 2014-11-11 Microsoft Corporation Depth map confidence filtering
JP5633218B2 (ja) 2010-07-13 2014-12-03 富士通株式会社 画像処理装置、画像処理プログラム
US20130050420A1 (en) * 2011-08-22 2013-02-28 Ding-Yun Chen Method and apparatus for performing image processing according to disparity information
US9153060B2 (en) * 2012-04-19 2015-10-06 Ohio State Innovation Foundation Method for estimating a GRAPPA reconstruction kernel
WO2013184528A2 (en) * 2012-06-05 2013-12-12 Apple Inc. Interactive map
CA2879220A1 (en) * 2012-07-23 2014-01-30 Dow Agrosciences Llc Kernel counter

Also Published As

Publication number Publication date
JP2014142939A (ja) 2014-08-07
US9241142B2 (en) 2016-01-19
US20140204232A1 (en) 2014-07-24

Similar Documents

Publication Publication Date Title
KR102258414B1 (ko) 처리 장치 및 처리 방법
US10776126B1 (en) Flexible hardware engines for handling operating on multidimensional vectors in a video processor
KR101606622B1 (ko) Fsm을 구현하기 위한 특수 목적 요소의 이용
CN108541321B (zh) 将程序代码映射到高性能、高功效的可编程图像处理硬件平台的编译技术
US10754657B1 (en) Computer vision processing in hardware data paths
TWI690896B (zh) 影像處理器、由其執行之方法、及非暫態機器可讀儲存媒體
US10671401B1 (en) Memory hierarchy to transfer vector data for operators of a directed acyclic graph
US20080133877A1 (en) Method and apparatus for memory address generation using dynamic stream descriptors
US9395986B2 (en) Compiling method and compiling apparatus
US10922785B2 (en) Processor and method for scaling image
JP5894614B2 (ja) 画像処理用の記述子ベースストリームプロセッサおよびそれに関連する方法
WO2014039210A1 (en) Processor, system, and method for efficient, high-throughput processing of two-dimensional, interrelated data sets
US20120311305A1 (en) Information processing device
EP2988268B1 (en) Rendergraph compilation and use thereof for low-latency execution
JP2009081726A (ja) エントロピー符号化装置、エントロピー符号化方法およびコンピュータプログラム
CN113688982A (zh) 处理单元、相关装置和方法
CN111522584A (zh) 一种硬件循环加速处理器及其执行的硬件循环加速方法
JP2007102651A (ja) データ処理システム
CN113411533A (zh) 一种高动态范围制式的转换方法和装置
US10140538B2 (en) Computing control device, computing control method, and computer readable medium
Rahmad et al. Comparison of CPU and GPU implementation of computing absolute difference
Moradifar et al. Performance improvement of multimedia Kernels using data-and thread-level parallelism on CPU platform
KR102366519B1 (ko) 범용 그래픽 프로세서에서의 모션 보상의 병렬화 방법 및 장치
JP2000163266A (ja) 命令実行方式
KR20220166028A (ko) 데이터 전처리를 위한 스토리지 장치 및 그 동작 방법

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140901

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140901

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150410

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20150417

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150421

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20150417

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20150721

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20150821

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20150924

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151021

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160203

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160226

R150 Certificate of patent or registration of utility model

Ref document number: 5894614

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R360 Written notification for declining of transfer of rights

Free format text: JAPANESE INTERMEDIATE CODE: R360

R360 Written notification for declining of transfer of rights

Free format text: JAPANESE INTERMEDIATE CODE: R360

R371 Transfer withdrawn

Free format text: JAPANESE INTERMEDIATE CODE: R371

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

S534 Written request for registration of change of nationality

Free format text: JAPANESE INTERMEDIATE CODE: R313534

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250