(58)【調査した分野】(Int.Cl.,DB名)
前記デスティネーション画素の部分値を変更することは、前記ブロックの境界と前記スケーリングウィンドウの境界とを比較して、前記スケーリングウィンドウと重複する前記ブロックの一部を決定することを含む、
請求項1の方法。
前記変更された部分値を第2メモリに記憶することは、前記スケーリングウィンドウの一部が前記ブロックの外側にあり、且つ、前記第1メモリから以前に取得されたブロックの外側にあることに応じて、前記変更された部分値を記憶することを含む、
請求項3の方法。
前記デスティネーション画素の部分値を第2メモリから取得することは、前記スケーリングウィンドウが前記第1メモリから取得された画素ブロックと重複することに応じて、前記部分値を取得することを含む、
請求項1の方法。
前記スケーリングウィンドウ全体が前記ブロック又は前記第1メモリから以前に取得された少なくとも1つのブロックと重複していると判別したことに応じて、前記デスティネーション画素の最終値を前記部分値と等しく設定することをさらに含む、
請求項1の方法。
前記第1メモリ及び前記第3メモリは、制限されたメモリアクセス帯域幅によって特徴付けられたインタフェースによって前記プロセッサに接続されたシステムメモリ又はキャッシュのうち少なくとも1つであり、前記第2メモリは、前記プロセッサに関連するローカルランダムアクセスメモリ(RAM)である、
請求項9の装置。
前記プロセッサは、前記ブロックの境界と前記スケーリングウィンドウの境界とを比較して、前記スケーリングウィンドウと重複する前記ブロックの一部を決定することを行うように構成されている、
請求項9の装置。
前記プロセッサは、前記スケーリングウィンドウの一部が前記ブロックの外側にあり、且つ、前記第1メモリから以前に取得されたブロックの外側にあることに応じて、前記変更された部分値を記憶することを行うように構成されている、
請求項12の装置。
前記プロセッサは、前記スケーリングウィンドウが前記第1メモリから取得された画素ブロックと重複することに応じて、前記部分値を前記第2メモリから取得することを行うように構成されている、
請求項9の装置。
【発明を実施するための形態】
【0005】
デジタルカメラ、スマートフォン、タブレット、ラップトップコンピュータ、デスクトップコンピュータ等に実装される画像処理システムは、一般的に、デジタル画像のJPEG圧縮及びデジタル画像のダウンスケーリングの両方を実行して、対応するサムネイル画像を生成する。しかしながら、従来のJPEG圧縮及び従来のダウンスケーリングは、異なるフォーマットのデジタル画像内の画素にアクセスする。例えば、従来のJPEG圧縮は、離散コサイン変換(DCT)の圧縮アルゴリズムをサポートするためにブロック内の画素値にアクセスし、従来のダウンスケーリングは、画素値をラインバッファに記憶することをサポートするためにライン毎に画素値にアクセスする。従来のダウンスケーリングは、サムネイル画像内のデスティネーション画素を導出するために使用される画素を画定するソース画像ウィンドウが複数のブロックに亘って広がる場合には、画素のブロックに対して実行することができない。この問題は、ソース画像とサムネイル画像との間のスケーリング比が大きくなると悪化する。したがって、画素値を取得してJPEG圧縮及びダウンスケーリングの両方を実行するために、メインメモリに記憶された元のデジタル画像の画素上の2つの別々のパスが必要になる。各パスは、メモリ帯域幅及び電力を消費する。
【0006】
画像圧縮及びダウンスケーリングによって消費されるメモリ帯域幅及び電力は、画素値を記憶するのに使用されるシステムメモリ(又は、システムメモリのキャッシュ)を介して単一のパスでデジタル画像を表す画素値を取得し、次いで、取得した画素値を使用して圧縮画像及びダウンスケーリングされたサムネイル画像の両方を生成することによって低減される。したがって、各画素値は、従来のJPEG圧縮及びダウンスケーリングを実行するのに必要な2回の取得(パス毎に1回ずつ)の代わりに、システムメモリ又はキャッシュから1回だけ取り出される。単一のパスで取得された画素値から圧縮画像及びダウンスケーリングされたサムネイル画像を生成することは、従来の手法で画素値を取得するのに必要な2つのパスと比較してメモリ帯域幅及び消費電力を半分に低減することができる。
【0007】
いくつかの実施形態において、デジタル画像を表す画素値をシステムメモリ又はキャッシュからブロック(例えば、MCU等)単位で取得し、ブロック内の画素値に対してJPEG圧縮を実行する。ブロック内の画素値を圧縮するのと同時に、サムネイル画像内のデスティネーション画素の値を、ブロックの境界をデスティネーション画素に関するスケーリングウィンドウの境界と比較することによって生成する。デスティネーション画素のスケーリングウィンドウ内にあるブロック内の一部の画素値をデスティネーション画素の位置に補間し、補間された値を累積してデスティネーション画素の部分値を形成する。現在のブロックがスケーリングウィンドウの一部と重複する場合、又は、スケーリングウィンドウが複数の隣接するブロックに跨る場合に、部分値をローカルメモリ(ランダムアクセスメモリ(RAM)等)に記憶する。部分値は、後に取得した画素ブロックと重複し、後に取得したブロック内の画素値と累積されたスケーリングウィンドウに応じて、ローカルメモリから復元される。例えば、スケーリングウィンドウ内に存在する後に取得したブロック内の一部の画素値は、デスティネーション画素の位置に補間される。次に、補間された値をデスティネーション画素の部分値に累積する。デスティネーション画素の最終値は、スケーリングウィンドウ全体が1つ以上の取得した画素ブロックと重複すると、部分値に基づいて決定される。
【0008】
図1は、いくつかの実施形態による、画像の圧縮及び画像のダウンスケーリングを実行してサムネイル画像を形成する処理システム100のブロック図である。処理システム100は、画像110を表す情報を記憶するメモリ105を含む。メモリ105は、画像110をブロック115(明確にするために符号で1つのみ示す)に記憶するシステムメモリ又はキャッシュとして実装される。例えば、画像110は、256×256画素アレイ等の画素アレイによって表すことができる。画像110内の各ブロック115は、16×16画素の最小符号化ユニット(MCU)等の画素のサブセットによって表される。したがって、画像110は、16×16のブロック115のアレイとして表現するために細分化することができる。また、画像110は、それぞれ256画素を含む256ラインとして表現するために細分化することができる。
【0009】
処理システム100は、画像110を圧縮するための圧縮アルゴリズムを実施するJPEG(Joint Photographic Experts Group)エンコーダ125等のエンコーダ125を実装するために使用されるプロセッサ120を含む。図示された実施形態において、JPEGエンコーダ125は、画像110を、空間(2次元(2D))領域から、異なる振幅を有する周波数成分のセットとして画像110を表す周波数領域信号に変換するFDCT圧縮アルゴリズムを適用する順離散コサイン変換(FDCT)モジュール130を含む。FDCTモジュール130は、周波数領域信号の高周波数成分を破棄することにより、画像110の表現を圧縮する。高周波数成分を破棄することによって画像を圧縮することは、一部の情報が圧縮によって失われるため、損失の多い圧縮技術である。圧縮量(例えば、破棄される高周波数成分の数)は、圧縮率によって決定される。
【0010】
画像110の周波数領域表現は、エンコーダ135で実施される可逆圧縮アルゴリズムを使用してさらに圧縮される。例えば、エンコーダ135は、ハフマン符号化を実施して、画像110の周波数領域表現を、周波数領域表現における異なる値の発生の推定された頻度又は確率に基づいて導出される可変長符号テーブルを使用して符号化することができる。エンコーダ135は、メモリ145に記憶される圧縮画像140を生成する。いくつかの実施形態において、メモリ145は、メモリ105を実装するのに使用されるのと同じシステムメモリ又はキャッシュである。しかしながら、メモリ105,145を、異なるメモリ要素又はキャッシュとして実装することもできる。
【0011】
少なくとも部分的には、FDCTモジュール130は、画像110を表す画素値を2D領域から周波数領域に変換するので、画像110内の画素値をメモリ105からブロック単位で取得することが必要になる。例えば、JPEGエンコーダ125は、ブロック115をメモリ105から取得し、次いで、FDCTモジュール130は、ブロック115内の画素値をブロック115の周波数領域表現に変換し、周波数領域表現の高周波数成分を破棄して圧縮する。画像110のブロック115は、メモリアクセスコントローラ、メモリ物理層インタフェース、1つ以上のバス又はブリッジ等を含む要素によって実装可能なインタフェースを介してメモリ105から取り出される。インタフェースのメモリ帯域幅には制限があり、ブロック115を取得するために(少なくとも部分的に)割り当てられる。さらに、インタフェースを介してブロック115を取得することは、電力を消費し、圧縮処理に遅延が発生する。
【0012】
また、処理システム100は、プロセッサ120と同じであってもよいし異なってもよいプロセッサ150を含む。プロセッサ150は、画像110内の画素値からサムネイル画像160を生成するのに使用されるサムネイルスケーラ155を実装する。サムネイル画像160は、メモリ163に記憶されている。サムネイルスケーラ155は、画像110からライン毎に画素値を取得し、画素の各ラインをバッファ165に記憶する。例えば、サムネイルスケーラ155は、256画素のラインをメモリ105から取得し、当該ラインをバッファ165に記憶することができる。図示した実施形態において、サムネイルスケーラ155は、バイリニア補間モジュール170を実施し、ライン内の画素値をデスティネーション画素の位置に補間することによって、サムネイル画像内のデスティネーション画素(デスティネーション画素175等)に対する当該ライン内の各画素の寄与度を推定する。また、サムネイルスケーラ155は、デスティネーション画素175に対するライン内の画素の寄与度を推定するために、バイキュービック補間モジュール180を実装する。次に、平均化モジュール185を使用して、バイリニア補間モジュール170及びバイキュービック補間モジュール180によって生成された値を平均化し、デスティネーション画素175の最終値を生成する。
【0013】
少なくとも部分的には、サムネイルスケーラ155が、バッファ165に記憶するために画像110からライン毎に画素値を取得するので、画像110のライン毎のスキャンは、JPEGエンコーダ125によって実行される画像110のブロック毎のスキャンに加えて、サムネイルスケーラ155によって実行される。サムネイルスケーラ155は、メモリアクセスコントローラ、メモリ物理層インタフェース、1つ以上のバス又はブリッジ等を含む要素によって実装可能なインタフェースを介してメモリ105からラインを取得する。したがって、サムネイルスケーラ155によって実行される追加のスキャンは、圧縮及びダウンスケーリングを実行するために同じ画像110が2回フェッチされるので、メモリ帯域幅の消費量をほぼ2倍にする。さらに、画像110内の画素値を2つのパスで取得することは、圧縮及びダウンスケーリングを実行するのに必要な電力消費量をほぼ2倍にし、レイテンシも増加する。
【0014】
図2は、いくつかの実施形態による、画像内の画素値を補間してサムネイル画像内のデスティネーション画素の値を決定するために使用されるマッピング200を示す図である。マッピング200は、より大きな画像(
図2には示されていない)内の画像のサブセットを表すブロック210内の画素205(明確にするために符号で1つのみを示す)の値を、サムネイル画像220を表すデスティネーション画素215(明確にするために符号で1つのみを示す)に関連付ける。図示された実施形態において、ブロック210は、256×256画素アレイによって表される画像の一部である16×16画素の最小符号化単位(MCU)内の画素のサブセットを含む。図示された実施形態において、ブロック210とサムネイル画像220との間のダウンスケーリング比が3.99×2.66となるように、サムネイル画像220は、4×6のデスティネーション画素215のアレイを有する。
【0015】
ダウンスケーリングは、ブロック210からライン225等の画素ライン(矢印227で示す)をフェッチし、フェッチしたライン225を、
図1に示すバッファ165等のラインバッファに記憶することによって実行される。画素205のグループは、対応するデスティネーション画素215に関連付けられている。例えば、グループ230は、デスティネーション画素215に関連付けられている。グループ230内の画素205の値は、デスティネーション画素215の値に対する寄与度をそれぞれ提供する。各画素205のデスティネーション画素215の値に対する寄与度は、画素205の位置からデスティネーション画素215の位置に補間することによって決定される。
【0016】
いくつかの実施形態において、FANTアルゴリズムを使用して、X方向及びY方向におけるオフセットに基づいて、デスティネーション画素215の値に対する寄与度を決定することができる。寄与度(Dest
pel)は、
【数1】
として表すことができ、ここで、P[y][x]は、位置(x,y)におけるソース画素の値であり、xportionは、X方向に最も近い左側の整数画素からの距離であり、yportionは、Y方向に最も近い上部の整数画素からの距離であり、xは、グループ230内の画素205に亘ってX方向に0からhscal_ratioに変化し、yは、グループ230内の画素205に亘ってY方向に0からvscl_ratioに変化する。概して、バイリニア、バイキュービック及びFANT平均化アルゴリズムは、スケーリングウィンドウに含まれる画素を使用してデスティネーション画素値に補間するために使用可能な補間技術である。例えば、デスティネーション画素215は、スケーリングウィンドウ230内の画素のブロックを使用して補間することができる。
【0017】
ラインバッファを実装するのに必要な面積コストは高く、グループのサイズに比例して(例えば、hscal_ratio又はyscal_ratioに比例して)増加する。ライン225をシステムメモリ又はキャッシュからフェッチすることは、システムメモリ又はキャッシュへのインタフェースの帯域幅を消費する。さらに、ブロック210をダウンスケーリングすることによってサムネイル画像220を生成するために消費される電力は、ラインバッファのサイズが大きくなるにつれて増加し、ライン225をフェッチすることによって消費されるメモリ帯域幅の量が増加するにつれて増加する。ラインバッファの必要性を排除しつつ、JPEG符号化及びサムネイルダウンスケーリングを、JPEG符号化を実行するブロック毎の第1パス及びサムネイルダウンスケーリングを実行するライン毎の第2パスの代わりに、ソース画像の単一パスを使用して実行することによって、全体的な電力消費量を低減することができる。
【0018】
図3は、いくつかの実施形態による、単一のパスを使用して画像内のデータにアクセスし、画像圧縮及び画像のダウンスケーリングを実行してサムネイル画像を形成する処理システム300のブロック図である。処理システム300は、画像310を表す情報を記憶するメモリ305を含む。メモリ305は、画像310をブロック315(明確にするために符号で1つのみを示す)に記憶するシステムメモリ又はキャッシュとして実装される。例えば、画像310は、256×256画素アレイ等の画素アレイによって表すことができる。画像310内の各ブロック315は、16×16画素MCU等の画素のサブセットによって表される。したがって、画像310を、16×16のブロック115のアレイとして表現するために細分化することができる。
【0019】
メモリ305は、インタフェース325によってプロセッサ320に接続されている。インタフェース325のいくつかの実施形態は、メモリ305とプロセッサ320との間で情報を通信するために、限られた量のメモリ帯域幅を提供する。例えば、インタフェース325は、メモリアクセスコントローラ、メモリ物理層インタフェース、1つ以上のバス、1つ以上のブリッジ、又は、他のハードウェア要素を使用して実装することができ、これらの要素は、ハードウェア要素の特性によって決定されるメモリ帯域幅の量を提供するように制約されている。インタフェース325を使用してメモリ305とプロセッサ320との間で情報を伝達することによって、インタフェース325を介して伝達される情報量が増加するにつれて増加する電力量を消費する。
【0020】
プロセッサ320は、画像310を圧縮するための圧縮アルゴリズムを実施するJPEGエンコーダ330等のエンコーダ330を実装する。図示された実施形態において、JPEGエンコーダ330は、画像310を、空間(2D)領域から、異なる振幅を有する周波数成分のセットとして画像310を表す周波数領域信号に変換するFDCT圧縮アルゴリズムを適用するFDCTモジュール335を含む。FDCTモジュール335は、本明細書で説明するように、周波数領域信号の高周波数成分を破棄することによって、画像310の表現を圧縮する。画像310の周波数領域表現は、エンコーダ340で実施される可逆圧縮アルゴリズムを使用してさらに圧縮される。たとえば、エンコーダ340は、本明細書で説明するように、画像310の周波数領域表現を符号化するためにハフマン符号化を実施することができる。
【0021】
エンコーダ340は、圧縮画像345を生成し、この圧縮画像は、インタフェース355によって、プロセッサ320に接続されたメモリ350に記憶され、このインタフェースは、メモリコントローラ、メモリ物理層インタフェース、バス、ブリッジ等を含むハードウェア要素の組み合わせを使用して実装することができる。したがって、インタフェース355は、プロセッサ320とメモリ350との間で情報を伝達するための限られた帯域幅を有する。いくつかの実施形態において、メモリ350は、メモリ305を実装するのに使用されるのと同じシステムメモリ又はキャッシュであり、この場合、インタフェース355は、インタフェース325と同じである。しかしながら、メモリ305,350は、異なるインタフェース325,355によってプロセッサ320に接続された異なるメモリ要素又はキャッシュとして実装することもできる。
【0022】
また、プロセッサ320は、画像310内の画素値からサムネイル画像365を生成するのに使用されるサムネイルスケーラ360を実装する。図示された実施形態において、サムネイルスケーラ360は、FANT平均化アルゴリズム385を実施して、画素の累積及び所定のスケーリングウィンドウに亘る平均化を実行する。デスティネーション画素375の値は、ブロック310内の所定のスケーリングウィンドウ(HSCL×VSCL)内の入力画素によって決定される。したがって、全ての入力ソース画素315が考慮され、サムネイル画像365内のデスティネーション画素375の値に寄与する。スケーリング比が分数である場合(すなわち、スケーリングウィンドウ境界が整数インデックス画素315の間に入る場合)、スケーリングウィンドウの境界内に入る部分ソース画素315は、対応するデスティネーション画素375の値に寄与する。これは、スケーリングウィンドウ境界を超えるエイリアシングの影響を最小にする。デスティネーション画素375の値は、インタフェース390を介してメモリ350に伝達される。インタフェース390は、メモリコントローラ、メモリ物理層インタフェース、バス、ブリッジ等を含むハードウェア要素の組み合わせを使用して実装される。したがって、インタフェース390は、プロセッサ320とメモリ350との間で情報を伝達するための限られた帯域幅を有する。インタフェース390のいくつかの実施形態は、インタフェース355と同じである。
【0023】
プロセッサ320は、ランダムアクセスメモリ(RAM)395として実装可能なローカルメモリに関連付けられている。RAM395は、プロセッサ320内又はプロセッサ320に近接して実装することができる。これにより、プロセッサ320とローカルRAM395との間で情報を伝達するのに必要なアクセスレイテンシ、メモリ帯域幅及び消費電力は、インタフェース325,355,390を介して情報を伝達するのに必要なアクセスレイテンシ、メモリ帯域幅及び消費電力と比較して小さい(場合によっては、僅かである)。
【0024】
プロセッサ320は、インタフェース325を介して、メモリ305に記憶された画像410からブロック315をブロック単位でフェッチする。JPEGエンコーダ330及びサムネイルスケーラ360は、フェッチされたブロックに対して同時に動作し、圧縮画像345及びサムネイル画像365の各々を生成する。例えば、プロセッサ320は、メモリ305からブロック315内の画素の値を取得することができる。JPEGエンコーダ330は、圧縮アルゴリズムをこれらの値に適用して圧縮画像345を生成し、サムネイルスケーラ360は、JPEGエンコーダ330の動作と並行して、ブロック315内の画素の値に対して、デスティネーション画素375のスケーリングウィンドウと重複するブロック315の部分内の画素値に基づいて、デスティネーション画素375の部分値を変更する。サムネイルスケーラ360は、変更された部分値を、RAM395等のプロセッサ320に関連するローカルメモリに記憶することができる。また、本明細書で説明するように、サムネイルスケーラ360は、画像310内の他のブロック上で動作するときに、変更された部分値をRAM395から取得することができる。JPEGエンコーダ330は、ブロック315を圧縮した後に圧縮画像345をメモリ350に記憶する。サムネイルスケーラ360は、本明細書で説明するように、完成したサムネイル画像365をメモリ350に記憶する。
【0025】
図4は、いくつかの実施形態による、行及び列に編成されたMCUのセットを含む画像の一部400を示す図である。画像は、M行及びN列のMCUに分割される。例えば、画像は、
図3に示す画像310によって示すように、16行及び16列を含むことができる。この一部400は、行のサブセット(m,m+1)列のサブセット(n,n+1,n+2)によって識別されるMCUのサブセットを含む。例えば、MCU405は、行/列ペア(m,n)によって識別される。各MCUは、4つのデータユニットにさらに細分化される。例えば、MCU405は、データユニット410,411,412,413に細分化され、これらのデータユニットを本明細書でまとめて「データユニット410〜413」と呼ぶ。各データユニットは、画素ブロックを含む。例えば、データユニット410は、画素415を含む8×8画素ブロックを含む。本明細書で説明するように、MCU内の画素値は、システムメモリ又はキャッシュ(例えば、
図3に示すメモリ305等)から取得され、同時に圧縮及びダウンスケーリングされて、ブロック単位でサムネイル画像を形成する。
【0026】
スケーリングウィンドウ420,421,422,423,424,425(本明細書ではまとめて「スケーリングウィンドウ420〜425」と呼ぶ)は、一部400を含む画像をダウンスケーリングすることによって生成されるサムネイル画像内のデスティネーション画素に関連付けられている。スケーリングウィンドウ420〜425は、サムネイル画像内の対応するデスティネーション画素に寄与する一部400内の画素と重複して含む。例えば、スケーリングウィンドウ420は、行/列ペア(m,n+1)、(m+1,n)、(m+1,n+1)によって識別されるMCU内の画素と同様に、MCU405のデータユニット410〜413内の画素を含む。スケーリングウィンドウ420〜425の寸法は、本明細書で説明するように、スケーリング比又は別々の水平方向及び垂直方向のスケーリング比によって決定される。スケーリング比のいくつかの実施形態は、スケーリングウィンドウ420〜425の境界が整数値によってインデックスされた画素間に入ることができるように、分数である。この場合、スケーリングウィンドウ420〜425の境界内にある部分ソース画素は、サムネイル画像内の対応するデスティネーション画素値の計算に含まれる。
【0027】
スケーリングウィンドウ420〜425に関連するデスティネーション画素の最終値は、スケーリングウィンドウ420〜425が複数のブロックと重複するため、単一ブロック内の画素値によって決定されない。その代わりに、デスティネーション画素の部分値は、ブロック毎に決定される。例えば、スケーリングウィンドウ420に関連するデスティネーション画素の部分値は、MCU405内の画素値を圧縮するのと同時に、データユニット410〜413内の画素値を補間することによって決定される。この部分値は、MCU405の境界を検出したことに応じて、ローカルメモリに記憶される。したがって、ダウンスケーリングしてサムネイル画像を生成するのに使用されるMCU405内の画素値の補間と、MCU405内の画素値の圧縮との両方を、システムメモリ又はキャッシュから単一のスキャンにおいて取得された値を使用して実行することができる。
【0028】
MCU405の処理が完了すると、別のMCUをシステムメモリ又はキャッシュから取得することがえきる。例えば、MCU405のダウンスケーリング及び圧縮の完了に応じて、MCU(m,n+1)内の画素値をシステムメモリ又はキャッシュから取得することができる。取得したMCUと重複するスケーリングウィンドウに関連するデスティネーション画素の部分値を、ローカルメモリから生成又は取得することができる。例えば、スケーリングウィンドウ420に関連するデスティネーション画素の部分値は、システムメモリ又はキャッシュからMCU(m,n+1)を取得することに応じて、ローカルメモリから取得される。別の例では、MCU(m,n+1)の取得に応じて、スケーリングウィンドウ421に関連するデスティネーション画素の部分値を生成することができる。次に、スケーリングウィンドウ420,421に含まれる画素の寄与度が補間され、対応する部分値に累積され、スケーリングウィンドウ420,421又はMCU(m,n+1)の境界の検出に応じて、ローカルメモリに記憶することができる。
【0029】
デスティネーション画素の最終値は、対応するスケーリングウィンドウ全体によって包含される画素値を補間することに応じて決定される。例えば、スケーリングウィンドウ420に関連するデスティネーション画素の最終値は、MCU(m+1,n+1)を処理している間に右下隅のスケーリングウィンドウ420の境界に到達したことに応じて決定される。デスティネーション画素の最終値は外部メモリに記憶され、外部メモリは、画像の一部400を記憶するのに使用されるシステムメモリ若しくはキャッシュと同じメモリ又は異なるメモリであってもよい。
【0030】
図5は、いくつかの実施形態による、サムネイル画像内のデスティネーション画素に関連するスケーリングウィンドウ501,502,503,504によって重複したMCU500を示す図である。MCU500は、データユニット510,511,512,513に細分化され、これらのデータユニットは、本明細書ではまとめて「データユニット510〜513」と呼ばれる。スケーリングウィンドウ501,502,503,504(本明細書ではまとめて「スケーリングウィンドウ501〜504」と呼ぶ)は、データユニット510の異なる部分515,516,517,518(本明細書ではまとめて「部分515〜518」と呼ぶ)と、データユニット511〜513を含む他のデータユニットの部分と、を含む。
【0031】
スケーリングウィンドウ501〜504に関連するデスティネーション画素の部分値は、対応するスケーリングウィンドウ501〜504によって含まれるブロックの一部内の画素の寄与度を計算し、現在のブロックからの全ての寄与度を累積したときに部分値をローカルメモリに記憶し、対応するスケーリングウィンドウ501〜504によって少なくとも部分的に含まれる新たなブロックの取得に応じて部分値をローカルメモリから復元し、新たに取得したブロックの一部内の画素の寄与度を累積することによって、ブロック毎に累積される。
【0032】
いくつかの実施形態において、部分515〜518の境界の検出に応じて、部分値がローカルメモリに記憶される。例えば、スケーリングウィンドウ502に関連するデスティネーション画素の部分値は、システムメモリ又はキャッシュからMCU500内のデータユニット510を取得したことに応じて、ローカルメモリから取得される。データユニット510の一部516内の画素からの寄与度は、一部516の境界を検出したことに応じてローカルメモリに記憶され、部分値に累積される。また、スケーリングウィンドウ502〜504に関連するデスティネーション画素の部分値は、データユニット510内のスケーリングウィンドウ502〜504の境界を検出したことに応じて、ローカルメモリに記憶される。
【0033】
いくつかの実施形態において、デスティネーション画素の最終値は、対応するデスティネーション画素に対する画素の全ての寄与度を計算したことを示すスケーリングウィンドウ501〜504の境界を検出したことに応じて、システムメモリに記憶される。例えば、スケーリングウィンドウ501に関連するデスティネーション画素の部分値は、システムメモリ又はキャッシュからMCU500内のデータユニット510を取得したことに応じて、ローカルメモリから取得される。デスティネーション画素に寄与する最後の画素がデータユニット510の一部515の右下隅にあるので、デスティネーション画素の最終値は、一部515内の画素が処理されると決定される。したがって、データユニット510の処理中にスケーリングウィンドウ501の境界を検出したことに応じて、スケーリングウィンドウ501のデスティネーション画素の最終値が、システムメモリに記憶される。
【0034】
図6は、いくつかの実施形態による、サムネイル画像内のデスティネーション画素に関連するスケーリングウィンドウ605によって重複したデータユニット601,602,603,604のセットを含むMCU600を示す図である。データユニット601,602,603,604は、本明細書ではまとめて「データユニット601〜604」と呼ばれる。スケーリングウィンドウ605は、データユニット601内の一部615内、データユニット602内の一部616内、データユニット603内の一部617内、及び、データユニット604内の一部618内の画素を含む。図示した実施形態において、データユニット601〜604をZパターンでシステムメモリから取得するので、これらを符号601〜604の番号順に取得する。
【0035】
スケーリングウィンドウ605に関連するデスティネーション画素の部分値は、システムメモリ又はキャッシュからデータユニット601を取得することに応じて生成される。一部615内の画素の値は、デスティネーション画素の位置に補間され、補間された値は、部分値に累積され、一部615又はデータユニット600及び同じものの境界を検出したことに応じて、ローカルメモリに記憶される。部分値は、システムメモリからデータユニット602,603を取得したことに応じてローカルメモリから復元され、一部616,617内の画素の値は、部分値に補間されて累積され、データユニット602,603又は一部616,617で境界を検出したことに応じてローカルメモリに記憶される。部分値は、システムメモリからデータユニット604を取得したことに応じてローカルメモリから復元され、一部618内の画素の値は、部分値に補間されて累積され、一部618内で境界を検出したことに応じて最終値を決定するために使用される。例えば、デスティネーション画素の最終値は、一部615〜618内の画素が寄与する部分値の合計に等しく設定されてもよく、次いで、この合計は、スケーリングウィンドウ605内の総画素数で除算されてもよい。
【0036】
図7は、いくつかの実施形態による、行及び列に編成されたMCUのセットに対するアクセスパターンを表す画像の一部700を示す図である。画像は、M行及びN列のMCUに分割される。例えば、画像は、
図3に示す画像310によって示されるように、16行及び16列を含むことができる。一部700は、行のサブセット(m,m+1)及び列のサブセット(n,n+1,n+2)によって識別されるMCUのサブセットを含む。例えば、MCU705は、行/列ペア(m,n)によって識別される。各MCUは、4つのデータユニットにさらに細分化される。例えば、MCU705は、本明細書ではまとめて「データユニット710〜713」と呼ばれるデータユニット710,711,712,713に細分化される。各データユニットは、画素ブロックを含む。例えば、データユニット710は、画素715を含む8×8画素ブロックを含む。本明細書で説明するように、MCU内の画素値は、システムメモリ又はキャッシュ(
図3に示すメモリ305等)から取得され、同時に圧縮及びダウンスケーリングされ、ブロック単位でサムネイル画像を形成する。
【0037】
データユニット710〜713は、ライン720,725で示すようなZパターンでアクセスされる。したがって、データユニット710〜713は、符号710〜713の番号順にアクセスされる。MCU内の各データユニットと重複するスケーリングウィンドウの部分値は、MCU内の画素値の圧縮と同時に累積される。例えば、行/列ペア(m,n+1)によって示されるMCU内の左下のデータユニットは、サムネイル画像内の対応するデスティネーション画素に関連する9つのスケーリングウィンドウ730(明確にするために符号で1つのみを示す)によって重複される。スケーリングウィンドウ730の部分値は、データユニット内の画素値の処理中に累積される。
【0038】
スケーリングウィンドウ730の境界とデータユニットの境界との比較が、スケーリングウィンドウ730によって囲まれた全ての画素よりも少ないデスティネーション画素への寄与度であることを示す場合に、部分値は、ローカルメモリに記憶される。この比較が、対応するスケーリングウィンドウによって含まれる全ての画素のデスティネーション画素への寄与度を示す場合に、デスティネーション画素の最終値がシステムメモリに記憶される。例えば、
図7に示す中央のスケーリングウィンドウは、MCU(m,n+1)の左下のデータユニット内に完全に含まれる。したがって、中央のスケーリングウィンドウに関連するデスティネーション画素の最終値は、MCU(m,n+1)の左下のデータユニット内の画素の処理中又はこの処理後にシステムメモリに記憶される。
【0039】
図8は、いくつかの実施形態による、複数のMCUを含むスケーリングウィンドウに対応するデスティネーション画素値の部分的な累積を表す画像の一部800を示す図である。画像は、M行及びN列のMCUに分割される。例えば、画像は、
図3に示す画像310で示されるように、16行及び16列を含むことができる。一部800は、行のサブセット(m,m+1)及び列のサブセット(n,n+1,n+2)によって識別されるMCUのサブセットを含む。例えば、MCU805は、行/列ペア(m,n)によって識別される。各MCUは、4つのデータユニットにさらに細分化される。例えば、MCU805は、本明細書ではまとめて「データユニット810〜813」と呼ばれるデータユニット810,811,812,813に細分化され、各データユニットは、画素ブロックを含む。例えば、データユニット810は、画素815を含む8×8画素ブロックを含む。本明細書で説明するように、MCU内の画素値は、システムメモリ又はキャッシュ(
図3に示すメモリ305等)から取得され、同時に圧縮及びダウンスケーリングされて、ブロック単位でサムネイル画像を形成する。
【0040】
スケーリングウィンドウ820は、サムネイル画像内のデスティネーション画素に寄与する一部800内の画素を含む。本明細書で説明するように、スケーリングウィンドウ820によって含まれる画素値は、画素の位置からデスティネーション画素の位置まで補間され、補間された値は、デスティネーション画素値を決定するために、他の画素の補間された値と共に累積される。画素毎の補間された値の計算は、例えばJPEG圧縮アルゴリズム等に従って圧縮画像を形成するために、一部800のブロックの符号化と同時に実行される。例えば、領域821内の画素の補間された値は、データユニット811内の画素の符号化と同時にデスティネーション画素の部分値に累積される。次に、デスティネーション画素の部分値が、ローカルRAMに記憶される。データユニット813をシステムメモリから取得したことに応じて部分値がローカルRAMから取得され、領域822内の画素の補間された値が、データユニット813内の画素の符号化と同時にデスティネーション画素の部分値に累積される。次に、部分値がローカルRAMに記憶される。
【0041】
画素の補間された値の同時計算と、一部800のブロックの符号化とは、ブロック単位で実行される。例えば、MCU805の符号化及び領域821,822からのデスティネーション画素の部分値への寄与度の計算が完了すると、MCU(m,n+1)がシステムメモリから取得され、デスティネーション画素の部分値がローカルRAMから取得される。領域823,824,825,826内の画素値は、デスティネーション画素の位置に補間され、補間された値は、デスティネーション画素の部分値に累積される。累積は、MCU(m,n+1)内の対応するデータユニットの符号化と同時に実行される。次に、部分値がローカルRAMに記憶される。この処理は、スケーリングウィンドウ820によって含まれる全ての画素の寄与度が部分値に累積されるまで、ブロック毎に繰り返し続けられる。例えば、MCU(m,n+2)の領域828内の画素、MCU(m+1,n)の領域829内の画素、MCU(m+1,n+1)の領域830,831内の画素、及び、MCU(m+1,n+2)の領域832内の画素について、同時補間、部分値累積及び符号化が実行される。領域832の境界を検出したことに応じて、デスティネーション画素の最終値がメモリに記憶される。
【0042】
図9は、いくつかの実施形態による、同時画像圧縮及びサムネイル生成方法900のフロー図である。方法900は、
図3に示す処理システム300のいくつかの実施形態で実施される。例えば、方法900は、
図3に示すプロセッサ320等のプロセッサで実施することができる。
【0043】
ブロック905において、プロセッサは、画像の一部を表す画素ブロックの値をシステムメモリ又はキャッシュから取得する。画素ブロックは、MCU、MCU内のデータユニット、又は、他の2D画素グループであってもよい。
【0044】
ブロック910において、プロセッサは、ブロックの部分と重複するスケーリングウィンドウのデスティネーション画素の部分値を決定する。例えば、本明細書で説明するように、デスティネーション画素の部分値は、画素の位置からデスティネーション画素の位置までのブロックの部分内の画素値を補間することによって決定することができる。部分値は、
図3に示すローカルRAM395等のように、プロセッサに関連するローカルメモリに記憶される。
【0045】
ブロック915において、プロセッサは、完全なスケーリングウィンドウのデスティネーション画素値を決定する。例えば、デスティネーション画素の部分値は、デスティネーション画素値に寄与する画像内の全ての画素(すなわち、スケーリングウィンドウによって含まれる画像内の全ての画素)がプロセッサによって処理されたと判別する処理に応じて、デスティネーション画素の最終値に等しく設定される。いくつかの実施形態において、累積された部分値は、最終地を生成するために、デスティネーション画素値に寄与する画素数で除算される。デスティネーション画素の最終値は、
図3に示すメモリ350等のメモリに記憶される。
【0046】
ブロック920において、プロセッサは、ブロック内の画素値を符号化して、ブロック内の画素によって表される画像の一部の圧縮表現を形成する。例えば、プロセッサは、本明細書で説明するように、ブロック内の画素値に対してFDCT変換を実行することができる。
【0047】
ブロック925において、プロセッサは、圧縮表現の可逆符号化を実行する。例えば、プロセッサは、ブロック内の画素によって表される画像の一部の圧縮表現に対してハフマン符号化を実行することができる。本明細書で説明するように、ブロック910,915における動作は、ブロック920,925における動作と同時に実行される。したがって、ブロック内の画素値は、(ブロック905において)1回又は単一パスでのみメモリから取得される。
【0048】
判別ブロック930において、プロセッサは、システムメモリ又はキャッシュから取得された追加のブロックがあるかどうかを判別する。ある場合には、方法900は、ブロック905に移行し、プロセッサは、ブロック毎の画像圧縮及びサムネイル生成処理の別の繰り返しを実行する。ない場合には、方法900は、ブロック935に移行して終了する。
【0049】
図10は、いくつかの実施形態による、ブロック内の画素値に基づいてデスティネーション画素の部分値を計算して記憶する方法1000のフロー図である。方法1000は、
図3に示す処理システム300のいくつかの実施形態で実施される。例えば、方法1000は、
図3に示すプロセッサ320等のプロセッサで実施することができる。また、方法1000は、
図9に示すブロック910,915における動作のいくつかの実施形態を実行するために使用される。したがって、方法1000は、ブロック内の画素に対して、ブロック内の画素の符号化と同時に実行され、画素によって表される画像の圧縮表現を生成する。
【0050】
ブロック1001において、プロセッサは、次のスケーリングウィンドウに関連するデスティネーション画素値を表す部分値を累積し始める。プロセッサのいくつかの実施形態は、部分値の累積を開始する前に、部分値を0の値に初期化する。
【0051】
ブロック1005において、プロセッサは、システムメモリ又はキャッシュから取得されたブロックから画素値にアクセスする。図示した実施形態において、このブロックは、プロセッサによって現在処理されているデータユニットの一部である。画素は、スケーリングウィンドウに含まれている。したがって、画素は、ブロック又はデータユニットの境界と、スケーリングウィンドウの境界との結合によって囲まれた領域内にある。ブロック1010において、プロセッサは、デスティネーション画素の部分値に対する画素の寄与度を計算する。例えば、プロセッサは、画素の位置からデスティネーション画素の位置までの画素値を補間することができる。ブロック1015において、プロセッサは、ブロック1010で決定された寄与度を、デスティネーション画素の部分値に加算する。
【0052】
ブロック1020において、プロセッサは、そのブロック内の画素がスケーリングウィンドウの最後にあるかどうかを判別する。例えば、プロセッサは、本明細書で説明するように、画素がスケーリングウィンドウの境界にあるかどうか、及び、スケーリングウィンドウに含まれる全ての画素が以前に処理されたかどうかを判別することができる。画素が、スケーリングウィンドウに含まれる全ての画素の処理を完了するために処理される必要がある最後の画素である場合には、方法1000は、ブロック1025に移行する。画素が、スケーリングウィンドウに含まれる全ての画素の処理を完了するために処理される必要がある最後の画素でない場合には、方法1000は、情報をメモリに記憶することなく、判別ブロック1030に直接移行する。
【0053】
ブロック1025において、デスティネーション画素値を表す以前の部分値が、ローカルRAMから取得される。例えば、以前の部分値は、スケーリングウィンドウと、プロセッサによって以前に処理されたデータユニットとの結合に囲まれた画素を使用して計算された部分値であってもよい。ブロック1035において、取得された以前の部分値が、現在のデータユニットを使用して計算された部分値に加算される。ブロック1040において、部分値を、例えば、デスティネーション画素の部分値に寄与した総画素数で除算することによって平均化し、デスティネーション画素の最終値を生成し、最終値をシステムメモリに記憶する。
【0054】
判別ブロック1030において、プロセッサは、現在のデータユニットの境界に到達したかどうかを判別する。到達していない場合には、方法1000は、ブロック1005に移行し、このブロックから次の画素にアクセスする。現在のデータユニットの境界に到達した場合には、方法1000は、ブロック1045に移行し、部分値がローカルRAMに記憶される。本明細書で説明するように、部分値は、この後、異なるデータユニットからの画素を使用して、スケーリングウィンドウについて計算された部分値と累積するために、ローカルRAMから取得することができる。
【0055】
いくつかの実施形態では、
図1〜
図10を参照して上述した処理システム等の装置及び技術は、1つ以上の集積回路(IC)デバイス(集積回路パッケージ又はマイクロチップとも呼ばれる)を備えるシステムで実施される。これらのICデバイスの設計及び製造には、通常、電子設計自動化(EDA)及びコンピュータ支援設計(CAD)ソフトウェアツールが使用される。これらの設計ツールは、通常、1つ以上のソフトウェアプログラムとして表される。1つ以上のソフトウェアプログラムは、回路を製造するための製造システムを設計又は適合するための処理の少なくとも一部を実行するように1つ以上のICデバイスの回路を表すコードで動作するようにコンピュータシステムを操作する、コンピュータシステムによって実行可能なコードを含む。このコードは、命令、データ、又は、命令及びデータの組み合わせを含むことができる。設計ツール又は製造ツールを表すソフトウェア命令は、通常、コンピューティングシステムがアクセス可能なコンピュータ可読記憶媒体に記憶される。同様に、ICデバイスの設計又は製造の1つ以上のフェーズを表すコードは、同じコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体に記憶されてもよいし、同じコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体からアクセスされてもよい。
【0056】
コンピュータ可読記憶媒体は、命令及び/又はデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによってアクセス可能な任意の非一時的な記憶媒体又は非一時的な記憶媒体の組み合わせを含む。かかる記憶媒体には、限定されないが、光媒体(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、ブルーレイ(登録商標)ディスク)、磁気媒体(例えば、フロッピー(登録商標)ディスク、磁気テープ、磁気ハードドライブ)、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)、キャッシュ)、不揮発性メモリ(例えば、読み出し専用メモリ(ROM)、フラッシュメモリ)、又は、微小電気機械システム(MEMS)ベースの記憶媒体が含まれ得る。コンピュータ可読記憶媒体は、コンピュータシステムに内蔵されてもよいし(例えば、システムRAM又はROM)、コンピュータシステムに固定的に取り付けられてもよいし(例えば、磁気ハードドライブ)、コンピュータシステムに着脱可能に取り付けられてもよいし(例えば、光学ディスク又はユニバーサルシリアルバス(USB)ベースのフラッシュメモリ)、有線又は無線のネットワークを介してコンピュータシステムに接続されてもよい(例えば、ネットワークアクセス可能なストレージ(NAS))。
【0057】
いくつかの実施形態では、上記の技術のいくつかの態様は、ソフトウェアを実行する処理システムの1つ以上のプロセッサによって実装されてもよい。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、非一時的なコンピュータ可読記憶媒体上で有形に具現化された実行可能命令の1つ以上のセットを含む。ソフトウェアは、1つ以上のプロセッサによって実行されると、上記の技術の1つ以上の態様を実行するように1つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスク記憶デバイス、例えばフラッシュメモリ等のソリッドステート記憶デバイス、キャッシュ、ランダムアクセスメモリ(RAM)、又は、他の不揮発性メモリデバイス等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、1つ以上のプロセッサによって解釈若しくは実行可能な他の命令フォーマットであってもよい。
【0058】
上述したものに加えて、概要説明において説明した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があり、1つ以上のさらなるアクティビティが実行される場合があり、1つ以上のさらなる要素が含まれる場合があることに留意されたい。さらに、アクティビティが列挙された順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、特許請求の範囲に記載されているような本発明の範囲から逸脱することなく、様々な変更及び変形を行うことができるのを理解するであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、これらの変更形態の全ては、本発明の範囲内に含まれることが意図される。
【0059】
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、利益、利点、問題に対する解決手段、及び、何かしらの利益、利点若しくは解決手段が発生又は顕在化する可能性のある特徴は、何れか若しくは全ての請求項に重要な、必須の、又は、不可欠な特徴と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。