(57)【特許請求の範囲】
【請求項１】
複数の編集対象画像データを格納する画像編集装置であって、
第１の編集対象画像データの部分領域に他の画像を合成する編集手段と、
前記他の画像が合成された部分領域の位置を示す位置情報を格納する格納手段と、
前記第１の編集対象画像データとは異なる第２の編集対象画像データのうち、前記格納手段に格納された位置情報で示される位置を含む一部の領域を、前記位置情報で示される位置が中心になるよう、画面に表示するよう制御する表示制御手段と
を備えることを特徴とする画像編集装置。
【請求項２】
前記位置情報を前記第２の編集対象画像データの幅及び高さを利用して変換する変換手段をさらに備え、
前記表示制御手段は、前記第２の編集対象画像データのうち、前記変換後の位置情報で示される位置を含む一部の領域を前記画面に表示するよう制御すること
を特徴とする請求項１に記載の画像編集装置。
【請求項３】
前記編集手段は、前記第１の編集対象画像データの複数の部分領域に他の画像を合成し、前記格納手段は前記複数の部分領域の位置を示す複数の位置情報を格納し、
前記表示制御手段は、所定の指示に応答して前記位置情報を切り替えて、前記第２の編集対象画像データのうち一部の領域を表示するよう制御すること
を特徴とする請求項１または２に記載の画像編集装置。
【請求項４】
前記他の画像は、前記第１の編集対象画像データの一部をコピーしたものであることを特徴とする請求項１乃至３のいずれか１項に記載の画像編集装置。
【請求項５】
前記第２の編集対象画像データの一部の領域には画像外領域が含まれないことを特徴とする請求項１乃至４のいずれか１項に記載の画像編集装置。
【請求項６】
前記表示制御手段は、前記位置情報で示される位置を識別可能に表示することを特徴とする請求項１乃至５のいずれか１項に記載の画像編集装置。
【請求項７】
複数の編集対象画像データを格納する画像編集装置の制御方法であって、
第１の編集対象画像データの部分領域に他の画像を合成する編集工程と、
前記他の画像が合成された部分領域の位置を示す位置情報を格納手段に格納する格納工程と、
前記第１の編集対象画像データとは異なる第２の編集対象画像データのうち、前記格納手段に格納された位置情報で示される位置を含む一部の領域を、前記位置情報で示される位置が中心になるよう、画面に表示するよう制御する表示制御工程と
を備えることを特徴とする画像編集装置の制御方法。
【請求項８】
コンピュータに、複数の編集対象画像データを格納する画像編集装置の制御方法を実行させるためのコンピュータプログラムであって、
前記方法は、
第１の編集対象画像データの部分領域に他の画像を合成する編集工程と、
前記他の画像が合成された部分領域の位置を示す位置情報を格納手段に格納する格納工程と、
前記第１の編集対象画像データとは異なる第２の編集対象画像データのうち、前記格納手段に格納された位置情報で示される位置を含む一部の領域を、前記位置情報で示される位置が中心になるよう、画面に表示するよう制御する表示制御工程と
を備える、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像編集装置及びその制御方法、コンピュータプログラム、記憶媒体に関する。
【背景技術】
【０００２】
デジタル一眼レフカメラの構造上の問題点として、レンズ交換できないタイプ（一体型）のものとは異なり、レンズ交換時に撮像センサ等で構成される撮像部が外気にさらされるという点がある。そのため、撮像センサ上のローパスフィルタ等にごみが付着し、これが撮影データに写りこんでしまう。このような「ごみ問題」を解決するためにハードウェアの支援は欠かせないが、現時点でこの対策がなされていない機体で撮影した画像データを救うためには、ＰＣ上のソフトウェア（ＰＣアプリケーション）による支援が有効である。
【０００３】
ごみ問題をＰＣアプリケーションで解決する方法としては、
（１）画像解析を用いた自動ごみ除去処理
（２）領域複製処理
といった方法が考えられる。（１）は画像からごみ位置を特定し、その領域を構成する画素値の推定を行うことでごみを除去する方法である。（２）は、ごみ領域上に別の領域の画素値をブレンドすることでごみを消す方法で、アプリケーション使用者がコピー元とコピー先の領域を指定することでごみ領域を手動で埋めることができる。
【０００４】
また、（１）はすべて自動で処理されるために作業コストは非常に低くできるが、ごみ領域特定用の画像を用意するなど解析処理が課題になる上、誤判定による画質劣化などのリスクがある。一方の（２）は、すべて手動で領域指定するために作業コストが高い反面、出力結果はアプリケーション使用者の意図と必ず一致させることができる。
【０００５】
領域複製処理は、Adobe社のPhotoShopに代表される画像加工アプリケーションに一般的に搭載されている機能であり、周りの似たような画像を使ってゴミを隠すレタッチ技法の一つである。
【０００６】
しかし、一般的な画像加工アプリケーションでは、複数の画像を処理する場合でも、全て一から処理しなくてはならず煩わしい。そこで、デジタル一眼レフカメラのごみの位置は、同時期の同じ機体であれば大体同じ位置にあるので、操作履歴をメモリ上に保存しておき、その操作履歴と全く同じ処理を別の画像に適用する方法が考えられる。このような機能を持つ画像加工アプリケーションには、操作履歴をコピーバッファに格納しておいて、コピーバッファ内の操作履歴と全く同じ処理を画像の回転方向を考慮して適用する機能が備えられているものもある。
【０００７】
また、動画像データを対象として連続するフレームの先頭フレームに対して補正処理を行い、その後のフレームに対しても同じ処理を自動的に適用する方法も提案されている（特許文献１を参照）。
【特許文献１】特開平１１-１０３４４７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、操作履歴をそのまま適用する方法では、全く同じ絵柄の画像に対しては有効であるが、異なる絵柄の画像に対して適用した場合に不適切な処理結果になってしまう可能性が高い。これは、例え画像の回転方向を考慮しても解決されない課題となる。
【０００９】
そこで、本発明は異なる絵柄の画像に対して操作履歴を適用した場合でも、ゴミの除去を効率的に実行できるようにすることを目的とする。
【課題を解決するための手段】
【００１０】
上記問題を解決するために、本発明は、複数の編集対象画像データを格納する画像編集装置であって、第１の編集対象画像データの部分領域に他の画像を合成する編集手段と、前記他の画像が合成された部分領域の位置を示す位置情報を格納する格納手段と、前記第１の編集対象画像データとは異なる第２の編集対象画像データのうち、前記格納手段に格納された位置情報で示される位置を含む一部の領域を、前記位置情報で示される位置が中心になるよう、画面に表示するよう制御する表示制御手段とを備えることを特徴とする。
【発明の効果】
【００１１】
本発明によれば、異なる絵柄の画像に対して操作履歴を適用した場合でも、ゴミの除去を効率的に実行することができる。
【発明を実施するための最良の形態】
【００１２】
以下、添付する図面を参照して、本発明の実施形態について説明する。
【００１３】
図１は、本発明の実施形態に対応する画像編集装置１００の概略構成を示す図である。ＣＰＵ１０１は、システム全体の動作をコントロールし、一次記憶１０２に格納されたプログラムの実行などを行う。一次記憶１０２は、主にメモリであり、二次記憶１０３に記憶されたプログラムなどを読み込んで格納する。二次記憶１０３は、例えばハードディスクで構成される。一般に一次記憶１０２の容量は二次記憶１０３の容量よりも小さく、一次記憶１０２に格納しきれないプログラムやデータなどは二次記憶１０３に格納されることとなる。また、長時間記憶しなくてはならないデータなども二次記憶に格納される。本実施形態では、プログラムを二次記憶１０３に格納し、プログラム実行時に一次記憶１０２に読み込んでＣＰＵ１０１が実行処理を行う。
【００１４】
入力デバイス１０４は、例えばシステムのコントロールに用いるマウスやキーボードの他、画像データの入力に必要なカードリーダー、スキャナ、フィルムスキャナなどで構成される。出力デバイス１０５は、例えばモニタやプリンタなどで構成される。バス１０６は、ＣＰＵ１０１、一時記憶１０２、二次記憶１０３、入力デバイス１０４及び出力デバイス１０５を相互に接続する。
【００１５】
画像編集装置１００の構成は他にも様々な形態が考えられるが、そのような構成形態の相違は本発明の主眼ではないので説明を省略する。
【００１６】
本実施形態に対応する画像編集装置１００には、複数のプログラムを並列実行可能なオペレーティングシステムが搭載され、操作者はＧＵＩを使って画像編集装置１００上で動作するプログラムの操作ができる。例えば本実施形態では、オペレーティングシステムとしてマイクロソフト社のWindows（登録商標）であるとする。したがって、実施の形態はWindows（登録商標）の仕様に依存した記述になっているが、他の環境で実現しても構わないことは言うまでもない。
【００１７】
次に、加工情報スタックの一例として、領域複製処理を行うＧＵＩ（グラフィカル・ユーザー・インタフェース）について説明する。図２は、本実施形態における画像編集プログラムのＧＵＩを示す図である。当該ＧＵＩは、出力デバイス１０５としてのモニタに表示される。
【００１８】
加工対象画像は、画像表示領域２０１に表示される。パレット２０２は、表示設定や加工パラメータを変更するためのボタン等を備える。該ボタンには以下のものが含まれる。
【００１９】
まず、コピー元位置指定モードボタン２０３、欠損領域補間モードボタン２１２、表示モード遷移ボタン２０４、全画面表示切り替えボタン２０５。コピー元座標がコピー先座標の変化に無関係に固定される固定モードと、コピー先座標との相対座標を維持しつつコピー先座標の変化に併せてコピー元座標が変化する可変モードとのいずれかを選択可能な、コピー元座標固定チェックボタン２０８。また、ブレンド領域の半径を指定する半径スライダ２０９、複数画像を加工対象とした場合の「次の画像」「前の画像」を選択する前選択ボタン２１０、及び、次選択ボタン２１１。更には、加工情報スタックを画像に添付する保存ボタン２０６、及び、加工情報スタック適用後の画像を出力するための変換ボタン２０７である。また、編集中の画像の加工情報スタックをメモリ上にコピーするコピーボタン２１３と、メモリ上にある加工情報スタックを編集中の画像に適用するペーストボタン２１４も備える。
【００２０】
図３は、図２に対応するＧＵＩ入力に応じて保持されるデータの一例である。（ａ）は編集対象画像３００のデータ構造を示し、（ｂ）は該編集対象画像３００が登録されるファイルリスト３１１のデータ構造を示す。これらのデータは、二次記憶１０３内に保持される。
【００２１】
本実施形態において、加工の対象となる編集対象画像３００は全て、ファイルリスト３１１に登録されている。ファイルリスト３１１を構成するファイルエントリ３１２には、各画像のファイル名３１３、画像回転情報３１４および加工情報スタック３１５が含まれる。また、ファイルエントリ３１２を示す編集対象画像ポインタ３１６があり、このポインタ３１６で参照されているファイルエントリ３１２に対応するファイルが編集対象画像３００となる。
【００２２】
編集対象画像３００には、未加工状態の未加工画像３０１、及び、加工情報スタック３０４を適用した後のプレビュー画像３０２が含まれる。未加工画像３０１を含むのは、後述するＵｎｄｏ／Ｒｅｄｏ処理のためである。
【００２３】
図３では、編集対象画像３００の加工情報スタック３０４とファイルエントリ３１２の加工情報スタック３１５が別のデータとして表現されているが、直接ファイルエントリ３１２の加工情報スタック３１５を参照しても良い。本実施形態では、加工情報スタック３０４が、ファイルエントリ３１２の加工情報スタック３１５を直接参照する形をとる。
【００２４】
また、１回のドラッグ操作によって複数の領域複製処理を１つの加工情報エントリ３０８に記録するため、ドラッグ操作に伴いＯＳから通知される座標は適用座標列３０６と呼ぶ配列に格納される。格納された座標の数は、適用座標数３０５で保持される。したがって、領域複製処理を開始した時点で適用座標数３０５を０に初期化する必要がある。
【００２５】
加工情報エントリ３０８内には、加工パラメータ３０９と加工画像キャッシュ３１０とが含まれる。加工パラメータ３０９とは、どの座標にどのような加工処理が適用されたかを示す情報である。本実施形態における加工処理には、加工処理ＩＤが「０x００００」の領域複製処理、及び、加工処理ＩＤが「０x０００１」の欠損領域補間処理が含まれる。本実施形態における加工パラメータ３０９には、加工処理ＩＤ、加工ＩＤに対応する加工処理の適用範囲を示す半径ｒ、適用座標列３０６、及び、適用座標数３０５が含まれる。
【００２６】
加工画像キャッシュ３１０には、加工情報エントリ３０８に記録された加工処理を適用する前と適用した後の画像の差分が保持される。このようなキャッシュを保持することで、実際に加工処理を実行するよりも高速に加工処理を実行できる。このキャッシュは、主にＵｎｄｏ／Ｒｅｄｏ処理で利用される。
【００２７】
本実施形態に対応する画像編集プログラムでは、加工情報スタック３０４以外の画像加工情報として画像回転情報３０３を持つ。画像の回転については、画像データそのものを回転することもできる。その一方、画像自体を処理せず、画像の回転方向を示す情報を付与することで、適切な画像の回転方向を保存することもできる。この回転情報は、例えばExif(Exchangeable image file format for Digital Still Cameras)のOrientationタグを利用することができる。この場合、画像データ自体に変更を加えないため、回転処理のためのデコード処理による画質の劣化が無く、RAWデータに代表される特殊な画像データ形式にも対応可能である。
【００２８】
そこで本実施形態では、加工情報スタック３０４に合わせて画像の回転方向を示す画像回転情報３０３を画像に付与することで画像の回転結果を保持することとする。本実施形態における画像の回転指定については、例えば、入力デバイス１０４としてのキーボードのCtrlキーとLキーを同時に押下することで左９０度回転を指定できる。また、CtrlキーとRキーを同時に押下することで右９０度回転を指定できる。なお、画像回転情報３０３や加工情報スタック３０４の保存方法やデータ形式については後述する。
【００２９】
次に、図４を参照して、ＧＵＩの状態遷移について説明する。図４は、ＧＵＩの状態遷移の一例を示す図である。ＧＵＩは、画像をｆｉｔ表示にするｆｉｔモード４０１と、画素等倍表示にする等倍モード４０２の２モードに分かれている。初期状態４００からアプリケーションが起動されると（４０３）、遷移コマンドに応じて互いの状態へ遷移（４０４、４０５）する。本実施形態では、ｆｉｔモード４０１時では画像加工が禁止され、等倍モード４０２でのみ画像加工ができるようになっている。これは、画像加工を実行する範囲が広くなると、加工画像キャッシュ３１０における差分データサイズが大きくなるため、アプリケーションが使用するメモリ領域が非常に大きなものになってしまうからである。画像加工操作を等倍モード４０２に限定することで、画像加工範囲を限定し、使用メモリ量をできるだけ増やさないようにすることができる。
【００３０】
ｆｉｔモード４０１では、等倍モード４０２への遷移４０４のみ実行可能である。等倍モード４０２への遷移４０４は、表示モード遷移ボタン２０４の押下、或いは、画像表示領域２０１にｆｉｔ表示されている画像のダブルクリックにより可能である。もし、ボタン２０４が押下された場合には、編集対象画像３００の中央部を画素等倍表示し、等倍モード４０２に遷移する。一方、ｆｉｔ表示画像がダブルクリックされた場合には、ダブルクリックした画像位置が中央に表示されるように画素等倍表示する。なお、等倍表示時において、画像外領域は黒で塗りつぶされて表示される。
【００３１】
等倍モード４０２では、画像加工が可能である。等倍モード時の状態遷移を図５を参照して説明する。図５は、等倍モード４０２における状態遷移の一例を示す図である。
【００３２】
ｆｉｔモード４０１から等倍モード４０２に遷移（４０４）した直後は、移動モード５０２になる。移動モード５０２の状態でダブルクリックされるか、表示モード遷移ボタン２０４を押下されると、ｆｉｔモード４０１へ遷移する（４０５）。
【００３３】
移動モード５０２では、表示位置の変更が可能である。スクロールバーで表示位置の変更ができる。移動モード５０２でキーボード上の"ｄ"キーが押下されている間、或いは、欠損領域補間モードボタン２１２を押下されると、欠損領域補間モード５０３になる（５０６）。"ｄ"キーが開放されるか、欠損領域補間モードボタン２１２が再度押下されると、移動モード５０２に戻る（５０７）。ここで更に表示モード遷移ボタン２０４が押下された場合には、ｆｉｔモード４０１へ戻る（４０５）。欠損領域補間モード５０３において画像がクリックされた場合、クリックされた座標を中心とする半径スライダ２０９で指定された半径の円で示される領域について、欠損領域補間処理が実行される。欠損領域補間処理の詳細については、図６を参照して後述する。
【００３４】
移動モード５０２において、Altキーを押下されている間、或いは、コピー元位置指定モードボタン２０３が押下されると、コピー元位置指定モード５０４に遷移する（５０８）。Altボタンが開放されるか、コピー元位置指定モードボタン２０３が再度押下されると、移動モード５０２に戻る（５０９）。ここで更に表示モード遷移ボタン２０４が押下された場合には、ｆｉｔモード４０１へ戻る（４０５）。コピー元位置指定モード５０４において画像がクリックされた場合、クリック位置をコピー元座標としてスタンプモード５０５に遷移する（５１０）。
【００３５】
スタンプモード５０５に入った後、最初にコピー先として左クリックされた座標に対し、領域複製処理を行う。この座標は、最初に指定されたコピー先座標であり、本実施形態では特に、「基準座標」と呼ぶ。基準座標が更新された場合、コピー相対座標を未設定状態にする。本実施形態において「コピー相対座標」とは、領域複製処理のコピー先の領域からコピー元の領域への相対座標を表す。
【００３６】
スタンプモード５０５において右クリックした場合、移動モード５０２に遷移する（５１１）。ここで更に表示モード遷移ボタン２０４が押下されれば、ｆｉｔモード４０１へ戻る（４０５）。
【００３７】
図５の状態遷移図では、欠損領域補間モード５０３からコピー元位置指定モード５０４へ直接遷移することや、その逆ができない。そこで、欠損領域補間モード５０３の状態でAltキーが押下された場合、コピー元位置指定モード５０４へ遷移しても良い。この場合、この状態でコピー元位置が指定された後、Altキーが開放された場合はスタンプモード５０５へ遷移し、コピー元位置が指定される前にAltキーが開放された場合は欠損領域補間モード５０３へ戻ることができる。逆に、コピー元位置指定モード５０４やスタンプモード５０５の状態で"ｄ"キーが押下された場合は、欠損領域補間モード５０３へ遷移しても良い。この場合、"ｄ"キーが押下されている間はクリックされた座標に対し欠損領域補間処理を行い、"ｄ"キーが開放されたら元のモードへ復帰することができる。
【００３８】
また、欠損領域補間モード５０３の状態でコピー元位置指定モードボタン２０３が押下された場合には、欠損領域補間モード５０３から抜けコピー元位置指定モード５０４へ遷移しても良い。さらに、コピー元位置指定モード５０４やスタンプモード５０５において欠損領域補間モードボタン２１２が押下された場合は、これらのモードから抜けて欠損領域補間モード５０３に遷移しても良い。
【００３９】
このように柔軟にモードを切り替えられるようにすることで、ＧＵＩの使いやすさを向上させることが可能になる。
【００４０】
次に、欠損領域補間処理、および領域複製処理の詳細について述べる。まず、欠損領域補間処理の一例を示すフローチャートを図６に示す。図６において、まずステップＳ６０１で、欠損領域判定を行う。欠損領域（ごみ領域）とは、次の条件全てを満たす領域とする。
【００４１】
(１)  指定領域内の平均輝度より暗い領域
(２)  指定領域を示す円と接しない領域
(３)  領域を囲む矩形の幅と高さがｌ１以上、ｌ２未満
ここで、指定領域とは、スタンプモードあるいは欠損領域補間モードにおいて、ユーザが左クリックした座標を中心とし、半径スライダ２０９で指定された値を半径とする円に含まれる領域である。本実施形態では、ｌ１を５（画素）、ｌ２を５０（画素）とする。このように一定サイズの領域だけを扱うことで、孤立した小領域だけを欠損領域として扱うことが可能になる。もし、このような領域が存在する場合には（ステップＳ６０２において「ＹＥＳ」）、ステップＳ６０３へ移行して欠損領域補間を行う。一方、このような領域が存在しない場合には（ステップＳ６０２において「ＮＯ」）、本処理を終了する。
【００４２】
ステップＳ６０３で実行される欠損領域補間処理は、公知の方法で行うことができる。本実施形態では例えば、特開２００１-２２３８９４号公報に開示されている方法で欠損領域補間処理を行うことができる。具体的には、まず、注目画素が欠損領域に含まれない正常画素であるか否かを判別し、正常画素と判別された場合に、注目画素が欠損領域の両端の画素と近色であるか否かを判別する。近色である場合には、注目画素が画像の端に来ていないかを判別する。画像の端に来ていない場合には、注目画素を正常画素パターンとして検出する。検出された正常画素パターンより欠損領域が大きいか否かを判別し、欠損領域の方が大きい場合には、次の画素を注目画素として、正常画素パターンが欠損画素領域以上になるまで同様の処理を繰り返す。
【００４３】
なお、特開２００１-２２３８９４号公報では、赤外光を用いて欠損領域を特定しているが、本発明では一般的なデジタルカメラで撮影した画像を対象としているので、ステップＳ６０１で検出された領域を欠損領域として扱う。
【００４４】
次に、図１６を参照して、領域複製処理の詳細を説明する。図１６は、領域複製処理の一例に対応するフローチャートである。
【００４５】
まず、ステップＳ１６０１では、コピー相対座標が設定されているか否かを判定する。もし、コピー相対座標が設定されていると判定された場合は（ステップＳ１６０１において「ＹＥＳ」）、ステップＳ１６０３へ移行する。一方、コピー相対座標が設定されていないと判定された場合は（ステップＳ１６０１において「ＮＯ」）、ステップＳ１６０２に移行する。ステップＳ１６０２では、基準座標からコピー元位置への相対座標を求め、これをコピー相対座標とする。
【００４６】
ステップＳ１６０３では、コピー元位置の相対座標を算出する。ここで、コピー元座標固定チェックボタン２０８において固定モードが選択され、コピー元位置を固定して扱う場合は、コピー元座標とコピー先座標の相対座標を用いる。一方、コピー元座標固定チェックボタン２０８において可変モードが選択され、コピー元位置を相対移動させて扱う場合、コピー相対座標を用いる。ステップＳ１６０４では、適用座標数を０に初期化する。続いて、ステップＳ１６０５では、マウスの左ボタンが押下されているか否かを判定する。もし左ボタンが押下されている場合は（ステップＳ１６０５において「ＹＥＳ」）、ステップＳ１６０６へ進む。そうでない場合は（ステップＳ１６０５において「ＮＯ」）、処理を終了する。
【００４７】
ステップＳ１６０６では、マウスのカーソルが指し示す座標をコピー先座標とし、複製マスクを用いてコピー相対座標からのブレンド処理を行う。ここで複製マスクは、半径スライダ２０９の状態に応じて生成されるもので、半径スライダ２０９の状態が変化する度に生成が行われる。複製マスク生成処理については後述する。また、ブレンド処理の詳細についても後述する。
【００４８】
ステップＳ１６０７では、適用座標数３０５を１つ増やし、適用座標列３０６にコピー先座標を追加する。その後、ステップＳ１６０５へ戻る。
【００４９】
次に、図１７を参照して、図６における欠損領域補間処理及び図１６における領域複製処理の結果を加工情報スタック３０４に登録する処理を説明する。図１７は、当該登録処理の一例に対応するフローチャートである。
【００５０】
図１７において、ステップＳ１７０１では、加工情報スタック終端位置情報３０７より先にある加工情報エントリ３０８が破棄される。続くステップＳ１７０２では、新たな加工情報エントリ３０８を作成し、これを参照するように加工情報スタック終端位置情報３０７を更新する。更に、ステップＳ１７０３では欠損領域補間処理、又は、領域複製処理によって変更された領域を含む部分画像を作成し、これを加工画像キャッシュ３１０とする。
【００５１】
ステップＳ１７０４では、ステップＳ１７０２で作成された加工情報エントリ３０８の加工パラメータ３０９として、加工処理ＩＤ、半径ｒ、コピー相対座標、適用座標数、適用座標列を登録し、処理を終了する。ここで、ステップＳ１７０４で登録する加工パラメータ３０９の値は、処理内容により次のように異なる。欠損領域補間処理の場合、加工処理ＩＤは０x０００１、半径ｒは半径スライダ２０９で指定された半径、コピー相対座標はｘ、ｙ方向共に０、適用座標数は１、適用座標列はユーザによって指定された座標である。
【００５２】
一方、領域複製処理の場合、加工処理ＩＤは０x００００、半径は半径スライダ２０９で指定された半径、コピー相対座標はステップＳ１６０３で算出した相対座標、適用座標数と適用座標列はステップＳ１６０７で更新した値とする。
【００５３】
なお、コピー相対座標と適用座標列については、いずれの場合も画像回転情報を用い、画像回転処理適用前の座標に変換して登録する。このような処理により、画像の回転方向が変更されたとしても常に適切な位置に加工処理を適用することが可能になる。
【００５４】
次に、図１６のステップＳ１６０６におけるブレンド処理の詳細について説明する。本実施形態におけるブレンド処理とは、コピー先座標を中心とした半径ｒの領域に、コピー元座標を中心とした半径ｒの領域を合成する処理をいう。ここで、コピー先座標から離れるほどコピー元座標の比率を落として合成処理しないと、領域複製処理を行った部分と行っていない部分との境界が目立ってしまうので、コピー先座標から離れるほど合成比率を落とすような処理を行う。そこで、合成処理を、半径をｒの２倍の範囲で行う。この合成の比率を示すマップのことを、複製マスクと呼ぶ。
【００５５】
複製マスクの概要は図７に示す通りである。複製マスク７０１の各要素の値域は、[０.０、１.０]である。この値が大きいほどコピー元領域の画素値が優先される。複製マスクの要素は、複製マスクの中心（Ｃｘ，Ｃｙ）からの距離に応じて算出される値で算出する。この計算方法については後述する。コピー元座標Ｆ、コピー先座標Ｔをそれぞれ、ｘ座標を−２*ｒ、ｙ座標を−２*ｒとした座標、複製マスクの左上を原点とした場合、座標（ｉ，ｊ）にある画素のブレンド処理を、次式に従って画素値を求める。
【００５６】
Ｔ'i,j = Ｂi,j * Ｆi,j + ( １．０ - Ｂi,j ) * Ｔi,j
ここで、Ｆはコピー元座標の画素、Ｔはコピー先領域の画素、Ｂは複製マスクの要素、Ｔ’はブレンド処理後のコピー先領域の画素とする。本実施形態ではＲＧＢそれぞれの色をブレンド率に応じて合成してブレンド後の画素値を算出する。
【００５７】
図１６に示した処理においてマウスがドラッグ操作された場合の、ドラッグ中のマウスの軌跡に対する処理について述べる。Windows（登録商標）では、ドラッグ中に通過した全ての座標がＯＳからアプリケーションに通知されるわけではなく、一定間隔で通知される。しかし、この間隔が比較的長い。そこで、ドラッグ状態を示す通知を受けた場合、その座標Ａ（ｘａ，ｙａ）と直前に通知された座標Ｂ（ｘｂ，ｙｂ）とを結ぶ線分上に一定距離L毎に領域複製処理を行う。このような処理を行うことで滑らかな領域複製結果を得ることができる。ここで、ドラッグ中の領域複製処理を適用する点の間隔Ｌを、半径スライダ２０９で指定された半径ｒを用いて次式で求める。
【００５８】
Ｌ = floor( ｒ / Ｂ + ０.５ )
ただし、Ｌ = ０の場合、Ｌ = １として処理する。ここで、floor(ｘ)は、実数ｘの小数点以下を切り捨てた整数値を表す。また、Ｂは経験的に求められる値で、本実施形態ではＢ=４.７とする。
【００５９】
ここで、図７に示した複製マスクの要素の計算方法について述べる。マスクの要素Ｂi,j は、次式で求めることができる。
Ｂi,j ＝ ｅｘｐ（−ｘ2／２）
ここでｘは、
ｘ＝（４／ｒ）＊｛（Ｃｘ−ｉ）2＋（Ｃｙ−ｊ）2｝1/2
とする。Ｃｘ、Ｃｙは図７に示したマスクの中央座標で、本実施形態では（Ｃｘ，Ｃｙ） = (２*ｒ,２*ｒ)とする。したがって、複製マスクサイズは、幅(４*ｒ+１)要素、高さ(４*r+１)要素となる。i、jは左上を(i, j) = (０, ０)とする座標値であり、i,jの値域は [０, ４*ｒ]となる。このとき、ｒは半径スライダ２０９で指定された半径である。
【００６０】
次に、図８を参照して、アプリケーションによってファイルが指定された場合や前選択ボタン２１０や次選択ボタン２１１によって編集対象画像３００が変更された場合の処理について説明する。図８は、当該処理の一例に対応するフローチャートである。
【００６１】
図８において、ステップＳ８０１では、編集対象画像３００の加工情報スタック３０４について、加工情報スタック終端情報３０７より先の加工情報エントリ３０８を破棄する。続くステップＳ８０２では、編集対象画像３００の加工情報スタック３０４について、加工情報スタック３０４の加工画像キャッシュ３１０を全て破棄する。更に、ステップＳ８０３では、新たに選択されたファイルのファイルエントリ３１２を参照するように、編集対象情報ポインタ３１６を更新する。ステップＳ８０４では、編集対象画像ポインタ３１６が参照する加工情報スタック３１５を参照するように、編集対象画像３００の加工情報スタック３０４の参照先を更新する。
【００６２】
ステップＳ８０５では、ファイルをデコードし、未加工画像３０１を取得する。ステップＳ８０６では、ステップＳ８０５で得られた未加工画像３０１に対し、加工情報スタック３０４に保持された加工処理を適用し、プレビュー画像３０２を生成する。ステップＳ８０７では、ＧＵＩの状態をｆｉｔモード４０１に遷移して、プレビュー画像３０２をｆｉｔ表示する。加工処理を適用しプレビュー画像３０２を生成する処理の流れは、図９を参照して後述する。
【００６３】
次に、本実施形態におけるＵｎｄｏ／Ｒｅｄｏ処理について説明する。Ｕｎｄｏとは、直前に適用した加工処理を取り消す処理である。本実施形態では、加工情報スタック終端位置情報３０７を、一つ前の加工情報エントリ３０８を参照するよう修正する処理になる。
【００６４】
一方のＲｅｄｏとは、Ｕｎｄｏの取り消し処理である。本実施形態では、加工情報スタック終端位置情報３０７を、参照中の加工情報エントリ３０８ではなく次のエントリを参照するように更新する処理にあたる。
【００６５】
この機能により、加工処理を適用した座標が間違っている場合や加工結果が思わしくない場合に、何度でもやりなおしすることができるようになる。
【００６６】
Ｕｎｄｏ／Ｒｅｄｏ処理や新たなファイルが選択された場合、プレビュー画像３０２の更新処理が必要になる。プレビュー画像３０２の更新処理は、未加工画像３０１に対して加工情報スタック３０４に従って加工処理を適用して行う。
【００６７】
プレビュー画像の更新処理の流れを示すフローチャートを図９に示す。なお、加工情報スタック３０４が空の場合、この処理を適用しない。
【００６８】
ステップＳ９０１では、プレビュー画像３０２を破棄した後、未加工画像３０１を複製し、この複製を新たなプレビュー画像３０２とする。このプレビュー画像３０２は、画像回転情報３０３が示す方向になるように回転処理される。続くステップＳ９０２では、加工情報スタック３０４が参照する加工情報エントリ３０８を参照するポインタｐを初期化する。ステップＳ９０３では、ポインタｐが参照する加工情報スタック３０４に加工画像キャッシュ３１０が存在するか否かを判定する。もし、存在する場合は（ステップＳ９０３において「ＹＥＳ」）、ステップＳ９０４へ移行し、存在しない場合は（ステップＳ９０３において「ＮＯ」）、ステップＳ９０５へ進む。
【００６９】
ステップＳ９０４では、画像回転情報３０３とキャッシュ回転情報とを比較し、画像回転情報３０３で指定された画像の方向に合うように、差分画像を回転し、差分をプレビュー画像３０２に反映し、ステップＳ９０６へ進む。ステップＳ９０５では、ポインタｐが参照する加工情報エントリ３０８の加工パラメータ３０９を用い、プレビュー画像に加工処理を適用する。ただし、加工処理を適用する前に、コピー相対座標、適用座標列に格納された座標を、画像回転情報が示す方向に回転し、回転後の座標に対して加工処理を適用する。加工処理適用後、ステップＳ９０６へ進む。
【００７０】
ステップＳ９０６では、未適用の加工情報エントリ３０８が存在するか否かを判定する。もしそのような加工情報エントリ３０８が存在する場合（ステップＳ９０６において「ＹＥＳ」）、ステップＳ９０７へ進む。存在しない場合は（ステップＳ９０６において「ＮＯ」）、処理を終了する。ステップＳ９０７では、ポインタpが未適用の加工情報エントリ３０８を参照するようにポインタを更新し、ステップＳ９０３へ戻る。
【００７１】
次に、保存ボタン２０６と変換ボタン２０７について説明する。保存ボタン２０６が押下された場合、加工情報スタック３０４および画像回転情報３０３がファイルに付与される。この機能を利用することで、元画像データを破壊することなく加工結果を保存することができる。変換ボタン２０７が押下された場合、元画像データに加工情報スタック３０４に応じた画像処理を適用し、画像回転情報３０３に従って画像を回転後、新たなファイルとして保存する。画像の回転前に加工情報スタック３０４を適用することで、加工情報スタック３０４内の座標変換を行わなくても良いという利点がある。しかし、本実施形態では処理の共通化のため、画像回転情報３０３に合わせて画像を回転した後、図９に示す処理によって加工情報スタック３０４に沿った加工処理を適用する。
【００７２】
保存ボタン２０６によって付与されるデータ形式の一例を図１０に示す。図１０に示すデータを加工情報（１０００）と呼び、以前に加工処理が行われた編集対象画像３００の処理履歴に関する情報が登録されるものである。画像回転方向１００１は、回転しない状態を０、右９０度回転時は１、１８０度回転時は２、左９０度回転時は３の値をそれぞれ２バイト（Byte）で格納する。加工情報スタックエントリ数１００２は４Byteの値で、加工情報スタックエントリの数を格納する。加工情報スタックエントリ内には、加工処理ID１００７、適用半径１００８、画像回転前の座標値で表現されたコピー相対座標１００９および適用座標１０１１と、適用座標数１０１０が保持される。座標はｘ座標２Byte、ｙ座標２Byteの計４バイトで、その他の数値は２バイトとする。加工処理ＩＤには、各加工情報エントリ３０８の加工パラメータ３０９内に格納されている加工処理ＩＤの値が格納される。
【００７３】
加工情報１０００は、ＪＰＥＧデータのＥＯＩ(End Of Image)の後やＴｉｆｆデータの末尾、ＲＡＷデータファイルの末尾に付与しても問題無い。但し、ＲＡＷデータファイルの末尾に特別な意味、例えばＲＡＷファイルの識別コードなどが含まれている場合がある。そこで、加工情報１０００の末尾の１６バイトには加工情報１０００をファイルに添付する前のファイルの末尾１６バイトをコピーして記録する互換エリア１００６を設けている。また、既に加工情報１０００があるかどうかを判定するため、互換エリア１００６の直前に、識別情報"ADT"\０（１００４）、および、データ長１００５をそれぞれ４バイトで格納している。
【００７４】
次に、加工情報１０００の読み込み処理について図１１を参照して説明する。図１１は、当該処理の一例に対応するフローチャートである。
【００７５】
ステップＳ１１０１において、最初にファイル末尾から２４バイト目の位置から４バイト分、即ち、識別情報１００４に相当するデータを読み込む。次に、ステップＳ１１０２では、ステップＳ１１０１で読み込まれたデータが"ADT"\０であるか否かに基づいて、加工情報１０００が画像データに付与されているか否かを判定する。もし、加工情報１０００が付与されていると判定される場合には（ステップＳ１１０２において「ＹＥＳ」）、ステップＳ１１０３へ進む。加工情報１０００が付与されていないと判定される場合には（ステップＳ１１０２において「ＮＯ」）、本読み込み処理を終了する。
【００７６】
ステップＳ１１０３では、ファイル末尾から２０バイト目の位置から４バイト分読み込み、加工情報１０００のデータ長１００５を取得する。続いて、ステップＳ１１０４においてファイル末尾から加工情報１０００のデータ長１００５分だけ戻った位置から、ファイル末尾までを読み込む。読み込んだデータが加工情報１０００となる。
【００７７】
このような画像編集プログラムを用いることで、編集加工対象となる画像データを破壊することなく画像を加工し、その加工結果を保存することが可能になる。
【００７８】
最後に、コピーボタン２１３とペーストボタン２１４の動作について説明する。コピーボタン２１３は、編集中の画像の加工情報スタック３０４を一時記憶１０２上にコピーして保持するためのボタンである。ペーストボタン２１４は一時記憶１０２上に加工情報スタック３０４の複製がある場合に有効になるボタンである。ボタン２１４が押下されると、一時記憶１０２上の加工情報スタック３０４の複製に記録されている処理を編集中の画像に対して適用する。処理を適用した後、加工情報スタック３０４の複製を破棄する。このようにすることで、コピー操作とペースト操作の繰り返しによる加工情報エントリ数の急激な増加を防ぐことが可能になる。これらの詳細については後述する。
【００７９】
ほぼ似た絵柄の画像が複数ある場合、一枚の画像に対して加工処理を行い、同様の処理を別の画像に適用することで、加工作業に費やす時間を削減することができる。本実施形態に対応する画像編集プログラムでは、編集手順を加工情報スタック３０４という形で保持しているため、この加工情報スタック３０４自体を別の画像に適用することで、このような処理を実現することができる。
【００８０】
まず、加工情報スタック３０４のコピー処理について述べる。加工情報スタック３０４のコピー処理とは、編集対象画像３００の加工情報スタック３０４を一時記憶１０２に格納する処理である。ただし、コピーした加工情報スタック３０４をペーストする場合、ペーストするかどうかの判断にはコピー元画像の解像度が必要になるため、これを別途保持する。一時記憶１０２に格納する情報は、加工情報スタック３０４、画像回転情報３０３、元画像の回転処理前の画像解像度である。
【００８１】
次に、加工情報スタック３０４のペースト処理について述べる。加工情報スタック３０４のペースト処理とは、上記のコピー処理によって一時記憶１０２内に保持された加工情報スタック３０４を、編集対象画像３００の加工情報スタック３０４に反映する処理である。
【００８２】
反映処理には、編集対象画像３００の加工情報スタック３０４にペーストする加工情報スタック３０４をアペンドする方法と、編集対象画像３００の加工情報スタック３０４を破棄してペーストする加工情報スタック３０４に置き換える方法がある。本実施形態では、後者を用いることにする。
【００８３】
以下、図１２を参照してペースト処理の流れを説明する。図１２は、ペースト処理の一例に対応するフローチャートである。
【００８４】
ステップＳ１２０１において、ペースト処理実行判定を行う。本実施形態では、一時記憶１０２に格納された元画像の回転前の画像解像度と、ペースト対象画像の回転前の画像解像度とを比較し、画像の幅および高さが一致した場合のみ、ペースト処理を実行する。ペースト処理を実行しない場合は（ステップＳ１２０１において「ＮＯ」）、処理を終了する。ペースト処理を実行可能と判定された場合は（ステップＳ１２０１において「ＹＥＳ」）、ステップＳ１２０２へ進む。ステップＳ１２０２では、ペースト対象画像の加工情報スタック３０４を破棄する。
【００８５】
更に、ステップＳ１２０３では、一時記憶１０２内の加工情報スタック３０４を複製し、これをペースト対象画像の加工情報スタック３０４とする。ステップＳ１２０４では、ペースト対象画像に対して図９に示したプレビュー画像更新処理を実行し、プレビュー画像、および加工画像キャッシュの再構成を行い、処理を終了する。
【００８６】
［第１の実施形態］
本発明の基礎となる上述の実施形態では、アプリケーションによってファイルが指定された場合や前選択ボタン２１０等により編集対象画像３００が変更された場合に、表示モードをｆｉｔモード４０１に戻す場合（例えば図８のステップＳ８０７）を説明した。これに対し、本第１の実施形態では、表示モードを維持したまま、適切な領域を表示するものである。
【００８７】
また、同じく上述の実施形態では、センサ上についたゴミが撮像データに写りこんでしまった場合の、ごみ除去処理を行うＧＵＩについて述べた。このセンサ上のゴミは、シャッターなどの衝撃によって若干移動する場合があるものの、連続して撮影した画像データには同じ位置にごみが写りこんでいる可能性が高いことが知られている。
【００８８】
そこで、本実施形態では、ユーザからのファイル指定や前選択ボタン２１０等により編集対象画像３００の変更指示を受け付けた場合に、画像回転前の座標を維持しながら表示画像を切り替える。これにより、他の画像に切り替えた後も、直前に表示していたゴミと同じ位置のゴミが表示されるように編集対象画像３００の表示を行う。
【００８９】
このような画像の切り替え方式を提供することで、複数の画像間で同じ位置にあるゴミに注目しながら編集作業を行うことができる。
【００９０】
図１３に、本実施形態に対応する編集対象画像３００の変更時の処理の流れを示すフローチャートを示す。ただし、ｆｉｔモード４０１の状態での編集対象画像の変更処理は、第１の実施形態と同様の処理（図８を参照。）を行う。以下の説明において、直前まで選択されていた編集対象画像３００を「第１の画像」、新たに選択された画像３００を「第２の画像」とする。第１の画像、第２の画像は、画像回転情報３０３に従って回転した後の状態とする。回転前の画像は、それぞれ「第１の未回転画像」及び「第２の未回転画像」とする。
【００９１】
ステップＳ１３０１において第１の画像のうち、表示されている部分領域の中心座標Ａを求める。ここで中心座標Ａは、表示領域中の座標ではなく、第１の画像の全体における座標である。次に、ステップＳ１３０２において第１の画像の画像回転情報を用いて、中心座標Ａの、第１の未回転画像上で対応する座標Ｂを算出する。この座標Ｂは、中心座標Ａを、画像回転情報で示される回転方向を打ち消す方向に回転することで算出できる。
【００９２】
ステップＳ１３０３では座標Ｂ（ＸＢ，ＹＢ）を、次式で正規化する。Ｗ１とＨ１はそれぞれ、第１の未回転画像の画像幅、画像高さである。正規化後の座標を（Ｘ’Ｂ，Ｙ’Ｂ）とする。
【００９３】
Ｘ’Ｂ = ＸＢ ／ Ｗ１
Ｙ’Ｂ = ＹＢ ／ Ｈ１
次に、ステップＳ１３０４において、第２の未回転画像の画像幅Ｗ２、画像高さＨ２を用いて、第２の未回転画像上の中心座標Ｃ（ＸＣ，ＹＣ）を算出する。
【００９４】
ＸＣ = Ｗ２ * Ｘ’Ｂ
ＹＣ = Ｈ２ * Ｙ’Ｂ
ステップＳ１３０５において、中心座標Ｃを第２の画像の画像回転情報３０３に従って回転した座標Ｄを求める。ステップＳ１３０６では、この座標Ｄが表示領域の中心となるように第２の画像を表示する。
【００９５】
このような処理を行うことで、未回転状態の画像上での相対位置を保ったまま、編集対象画像３００を切り替えることができる。したがって、仮に同じ機体で撮った複数の画像を切り替えた場合、画像の回転方向に関係なくセンサ上でほぼ同じ位置が表示領域の中心となり、加工処理が行われることとなる部位を表示させることができるので、効率良くごみ除去処理を行うことができる。
【００９６】
以上のようにして、本実施形態によれば、編集対象画像３００のゴミ除去処理において作成された加工情報スタック３０４を、新たな編集対象画像３００に適用することができる。これにより、当該新たな編集対象画像３００についても処理済みの画像について行ったものと同様の加工処理を施し、効率的にゴミ除去処理を行うことができる。
【００９７】
［第２の実施形態］
本実施形態では、第１の実施形態に加えて表示位置アシスト機能を備えることで、ごみ除去処理をより効率良く行う方法について述べる。本実施形態では、第１の実施形態の構成に加えて表示座標テーブルと表示座標テーブル更新フラグ、表示位置ＩＤを備える。ここで、表示位置ＩＤは、加工処理が行われた順序に対応する情報である。
【００９８】
表示座標テーブルを図１４に示す。表示座標テーブル１４００には、まず編集対象画像３００の画像回転方向１４０１が含まれる。また、編集対象画像３００の加工情報スタック３０４から取り出した座標列を編集対象画像３００の幅と高さで[０.０, １.０]に正規化した倍精度浮動少数点型の表示座標列１４０３と、座標数１４０２を格納する。図１５に、加工情報１０００から表示座標テーブル１４００を生成する処理の流れを示す。
【００９９】
ステップＳ１５０１では、編集対象画像３００の加工情報１０００が存在するか否かを判定する。もし加工情報１０００が存在する場合には（ステップＳ１５０１において「ＹＥＳ」）、ステップＳ１５０２に移行する。一方、加工情報１０００が存在しない場合には（ステップＳ１５０１において「ＮＯ」）、本処理を終了する。ステップＳ１５０２では、表示座標テーブル１４００の初期化処理を行う。具体的には、表示座標テーブル１４００の先頭に、編集対象画像３００の画像回転方向を示す値を格納する。画像回転方向を示す値は、図１０で示した加工情報１０００と同様とする。更に、座標数ｎを０に初期化し、表示座標列を空にする。
【０１００】
次に、ステップＳ１５０３では、加工情報１０００の加工情報スタックエントリ１００３の先頭を指すよう、ポインタｐを初期化する。ステップＳ１５０４では、ポインタｐが指し示す加工情報スタックエントリ１００３から、座標を取得して変換する。座標が複数ある場合、先頭の座標を用いる。変換処理は、次式で行う。
【０１０１】
Ｘ’ = Ｘ ／ （Ｗ−１）
Ｙ’ = Ｙ ／ （Ｈ−１）
ここで、Ｘ，Ｙは加工情報スタックエントリ１００３から取得した座標、Ｗ、Ｈは編集対象画像３００の画像幅と高さ、Ｘ’，Ｙ’は変換後の座標である。変換した座標は、表示座標テーブル１４００の末尾に追加する。
【０１０２】
ステップＳ１５０５では、座標数ｎを１増やす。ステップＳ１５０６では、ポインタｐによって指し示されている加工情報スタックエントリ１００３に引き続くエントリが存在するか否かを判定する。もし、該エントリが存在しない場合は（ステップＳ１５０６において「ＮＯ」）処理を終了する。一方、該エントリが存在する場合は（ステップＳ１５０６において「ＹＥＳ」）、ステップＳ１５０７へ進む。ステップＳ１５０７では、ポインタｐが指し示す加工情報スタックエントリ１００３の次のエントリを、ポインタｐが指すようにポインタｐを更新してステップＳ１５０４に戻る。
【０１０３】
次に、表示座標テーブル１４００の更新処理について述べる。編集対象画像３００をロードした場合、表示座標テーブル更新フラグをＯＦＦにする。また、図６中のステップＳ６０３の欠損領域補間処理、あるいは図１６中のステップＳ１６０６のブレンド処理が実行された場合、表示座標テーブル更新フラグをONにする。表示座標テーブル更新フラグがONの場合は、図１５に示す処理により表示座標テーブル１４００を更新する。
【０１０４】
このようにすることで、最後に編集した画像の加工情報スタック３０４から表示座標テーブル１４００を生成することができる。このような実装にすると、画像選択のために画像を順次表示させていったとしても加工作業を行うまでは表示座標テーブル１４００が更新されないので、ユーザは、表示座標テーブル１４００に登録されている内容を意識して作業を行うことができる。
【０１０５】
最後に表示位置の更新処理について述べる。本実施形態では、表示位置ＩＤと表示座標テーブル１４００を用いて算出した座標と、編集対象画像３００の幅と高さを用いて表示座標を算出し、表示座標が画像表示領域２０１の中央になるように表示位置を更新する。表示座標の更新処理の流れを、図１８を参照して以下に説明する。図１８は表示座標の更新処理の一例に対応するフローチャートである。
【０１０６】
ステップＳ１８０１において、表示位置ＩＤに１足した値をｊとすると、表示座標列のｊ番目の座標を取得する。この座標をｘ、ｙとする。ステップＳ１８０２では、表示座標テーブル１４００から画像回転方向１４０１を取得する。なお、ここで取得された回転方向１４０１の値をＲ１とする。ステップＳ１８０３では、後に算出される回転方向：Ｒｃを０に初期化する。ステップＳ１８０４では、ステップＳ１８０２で取得した画像回転方向：Ｒ１と、編集対象画像３００自体の画像回転方向（これをＲ２とする）とが等しいかどうかを判定する。もし、Ｒ１とＲ２とが等しいと判定されない場合には（ステップＳ１８０４において「ＮＯ」）、ステップＳ１８０８へ移行する。一方、Ｒ１とＲ２とが等しいと判定された場合には（ステップＳ１８０４において「ＹＥＳ」）、ステップＳ１８０５へ進む。ステップＳ１８０５では、ｘ、ｙの回転方向Ｒｃを、Ｒｃ = Ｒ２ - Ｒ１により算出する。
【０１０７】
次に、ステップＳ１８０６では、Ｒｃが０未満の場合に、Ｒｃ = ４ + Ｒｃ としてステップＳ１８０７へ進む。Ｒｃの補正が終わると、ステップＳ１８０７に進む。
【０１０８】
ステップＳ１８０７では、ＲＣに応じて回転処理を行う。回転後の座標ｘ’,ｙ’の具体的な座標計算式を次に示す。
【０１０９】
Ｒｃ=０の場合、
ｘ' = ｘ
ｙ' = ｙ
Ｒｃ=１の場合、
ｘ' = １.０ - ｙ
ｙ' = ｘ
Ｒｃ=２の場合、
ｘ' = １.０ - ｘ
ｙ' = １.０ - ｙ 
ＲＣ=３の場合、
ｘ' = ｙ
ｙ' = １.０ - ｘ
ステップＳ１８０８では、ｘ'，ｙ'に編集対象画像３００の画像幅Ｗ、画像高さＨを乗じて表示座標を算出する。即ち表示座標（ｐ、ｑ）は、次式で表される。
【０１１０】
ｐ = ｘ' × Ｗ
ｑ = ｙ' × Ｈ
ステップＳ１８０９では、ステップＳ１８０８で算出された座標が中心になるように、表示位置を更新する。
【０１１１】
表示位置ＩＤは、Ctrlキーと"f"キーを同時に押下された場合に+１する。逆に、Ctrlキーと"b"キーを同時に押下された場合に-１する。表示位置ＩＤが負の数になった場合、表示座標テーブル１４００内の表示座標数（１４０２）ｎから１減じた値を表示位置ＩＤとする。また、表示位置ＩＤが表示座標テーブル１４００内の表示座標数（１４０２）ｎ以上になった場合、表示位置ＩＤを０にする。表示位置ＩＤを変更した場合、図１８に示した処理を実行して表示位置の更新を行う。
【０１１２】
図１９に、加工情報１０００と表示位置の関係を示す。直前に加工した画像１９０１上の数字は、操作順序を表す。直前に加工した画像１９０１に対して編集操作順に表示座標テーブル１４００に座標を登録し、編集対象画像３００の表示位置変更に利用する。編集対象画像３００上に記述された点線の枠１９０２から１９０４は、表示領域２０１に表示される範囲を示す。点線の枠の右上に添えられた数字は、表示位置ＩＤと一致する。Ctrlキーと"f"キー、あるいはCtrlキーと"b"キーの押下によって、表示位置ＩＤが更新され、表示位置ＩＤに応じた位置が表示される。特に本実施形態では、常に表示位置の中心に編集加工位置が表示されるので、修正すべき位置の特定が容易になり作業効率が向上する。
【０１１３】
このように、直前に編集した画像１９０１の加工位置を正順、逆順に表示することで、画像毎にごみの位置を探さなくてもよい。また、加工位置の表示の際に回転情報を考慮することで、画像の回転方向を意識することなく加工処理を行うことが可能になる。
【０１１４】
［第３の実施形態］
本実施形態では、第２の実施形態で述べた表示位置アシスト機能の拡張について説明する。上記の第１及び第２の実施形態に対応する画像編集装置では、等倍モードにおいて画像外の領域が表示される仕様になっている。しかし、表示領域サイズより編集対象画像のサイズが大きい場合、等倍モードにおいても画像外領域を表示しないアプリケーションも多い。この場合、図２０に示すように、画像外領域が存在しないように表示位置を制御している。
【０１１５】
図２０は、表示位置補正処理の概要を表す図である。図２０において、３００は編集対象画像を示す。２００１は編集対象画像３００内で、表示領域の中心として指定された座標を示す。この座標２００１に基づいて特定される表示範囲は２００２に示すようなものとなる。しかし、表示範囲２００２は、編集対象画像３００からはみ出した領域を有している。そこで、表示範囲を２００３に示すように移動して、編集対象画像３００内に含まれるように補正することができる。
【０１１６】
第１の実施形態で説明したように、本実施形態においても、fitモードで表示された画像をダブルクリックするか、表示モード遷移ボタン２０４を押すことによって、fitモードから等倍モードへ遷移することができる。以下では、画像をダブルクリックすることによってfitモードから等倍モードへ遷移する場合の、本実施形態における処理の流れを説明する。
【０１１７】
fit表示状況に置ける表示座標系のパラメータは図２１に示す通りである。なお、全ての座標系は左上を基準点とし、横軸をＸ軸、縦軸をＹ軸とする。Ｘ軸は右方向を正、Ｙ軸は下方向を正とする。ここでは、図２に示す画像表示領域２０１の幅をWindowW、高さをWindowHとし、編集対象画像の幅をImageW、高さをImageHとする。また、fit表示された表示画像２１０１の表示サイズの幅をFitW、高さFitHとし、画像表示領域２０１の左上を基準点としたクリック位置２１０２の座標Ｃを、Ｃ＝(ClickX, ClickY)とする。
【０１１８】
次に、等倍表示モード時の表示座標系のパラメータを図２２に示す。座標系の考え方は、図２１のfit表示時と同様である。本実施形態では、図２２（ａ）に示すように、画像表示領域２０１の幅あるいは高さが、編集対象画像３００の幅あるいは高さより小さい場合は編集対象画像の一部が表示される。編集対象画像３００における表示領域の左上２２０１の座標Ｍを(ＭＸ，ＭＹ)とし、編集対象画像上で表示する領域の幅をＭＷ、高さをＭＨとする。
【０１１９】
一方、図２２（ｂ）に示すように、画像表示領域２０１の幅あるいは高さが、編集対象画像３００の幅あるいは高さより大きい場合は編集対象画像３００が画像表示領域２０１の中央に位置するように表示される。この場合の画像表示位置のオフセット値を、Ｘ軸方向はOffsetX、Ｙ軸方向はOffsetYで表す。
【０１２０】
即ち、編集対象画像３００における座標Ｍの範囲は、０≦ＭＸ≦ImageW-WindowW、０≦ＭＹ≦ImageH−WindowHとなる。以下では、座標Ｍを例として画像表示領域２０１の設定処理について説明するが、座標Ｍは画像表示領域２０１の位置を特定するための指標の一つに過ぎない。即ち、画像表示領域２０１を、該領域の左下、右上、右下、或いは、中心に基づいて設定してもよい。その場合の処理も、下記と同様に行える。
【０１２１】
次に、図２３のフローチャートを参照して、表示パラメータOffsetX、MX、MWの算出処理の詳細を説明する。
【０１２２】
まずステップＳ２３０１では、編集対象画像３００の幅ImageWが画像表示領域２０１の幅WindowW以下であるか否かが判定される。もし、ImageWがWindowW以下である場合には（ステップＳ２３０１において「ＹＥＳ」）、ステップＳ２３０２へ移行する。一方、ImageWがWindowW以下でない場合には（ステップＳ２３０１において「ＮＯ」）、ステップＳ２３０３へ移行する。
【０１２３】
ステップＳ２３０２では、編集対象画像３００の幅が画像表示領域２０１の幅以下の場合に、表示パラメータ算出処理１として、次式に基づき表示パラメータを算出する。
【０１２４】
OffsetX = (WindowW - ImageW) / 2
MX = 0
MW = ImageW
ステップＳ２３０２において表示パラメータを算出した後は、処理を終了する。
【０１２５】
次に、ステップＳ２３０３では、編集対象画像３００の幅が画像表示領域２０１の幅を超える場合に、表示パラメータ算出処理２として、次式に基づき表示パラメータを算出する。
【０１２６】
OffsetX = 0
MX = (ClickX / WindowW) × ImageW - WindowW / 2
MW = WindowW
ステップＳ２３０３において表示パラメータを算出した後は、ステップＳ２３０４に移行する。ステップＳ２３０４では、上記算出されたＭＸが負であるか否かが判定される。もし、ＭＸが負の値の場合には（ステップＳ２３０４において「ＹＥＳ」）、画像表示領域２０１が編集対象画像３００の外に出てしまうので、ステップＳ２３０５に移行してＭＸを０に設定する。その後、ステップＳ２３０６に移行する。一方、ＭＸが０以上の場合には（ステップＳ２３０４において「ＮＯ」）、ステップＳ２３０６に移行する。
【０１２７】
ステップＳ２３０６では、ＭＸとＭＷとの和が編集対象画像３００の幅ImageWを超えてしまうか否かが判定される。もし、ImageWを超えない場合には（ステップＳ２３０６において「ＮＯ」）、そのまま処理を終了する。一方、ImageWを超える場合には（ステップＳ２３０６において「ＹＥＳ」）、画像表示領域２０１が編集対象画像３００の外に出てしまうので、ステップＳ２３０７においてＭＸを次式で補正して、処理を終了する。
【０１２８】
MX = ImageW - WindowW
この補正により、画像表示領域２０１を編集対象画像３００内に納めることができる。
【０１２９】
次に図２４のフローチャートを参照して、表示パラメータOffsetY、MY、MHの算出処理の詳細を説明する。
【０１３０】
まずステップＳ２４０１では、編集対象画像３００の高さImageHが画像表示領域２０１の高さWindowH以下であるか否かが判定される。もし、ImageHがWindowH以下である場合には（ステップＳ２４０１において「ＹＥＳ」）、ステップＳ２４０２へ移行する。一方、ImageHがWindowH以下でない場合には（ステップＳ２４０１において「ＮＯ」）、ステップＳ２４０３へ移行する。
【０１３１】
ステップＳ２４０２では、編集対象画像３００の高さが画像表示領域２０１の高さ以下の場合に、表示パラメータ算出処理３として、次式に基づき表示パラメータを算出する。
【０１３２】
OffsetY = (WindowH - ImageH) / 2
MY = 0
MH = ImageH
ステップＳ２４０２において表示パラメータを算出した後は、処理を終了する。
【０１３３】
次に、ステップＳ２４０３では、編集対象画像３００の高さが画像表示領域２０１の高さを超える場合に、表示パラメータ算出処理４として、次式に基づき表示パラメータを算出する。
【０１３４】
OffsetY = 0
MY = (ClickY / WindowH) × ImageH - WindowH / 2
MH = WindowH
ステップＳ２４０３において表示パラメータを算出した後は、ステップＳ２４０４に移行する。ステップＳ２４０４では、上記算出されたＭＹが負であるか否かが判定される。もし、ＭＹが負の値の場合には（ステップＳ２４０４において「ＹＥＳ」）、画像表示領域２０１が編集対象画像３００の外に出てしまうので、ステップＳ２４０５に移行してＭＹを０に設定する。その後、ステップＳ２４０６に移行する。一方、ＭＹが０以上の場合には（ステップＳ２４０４において「ＮＯ」）、ステップＳ２４０６に移行する。
【０１３５】
ステップＳ２４０６では、ＭＹとＭＨとの和が編集対象画像３００の高さImageHを超えてしまうか否かが判定される。もし、ImageHを超えない場合には（ステップＳ２４０６において「ＮＯ」）、そのまま処理を終了する。一方、ImageHを超える場合には（ステップＳ２３０６において「ＹＥＳ」）、画像表示領域２０１が編集対象画像３００の外に出てしまうので、ステップＳ２３０７においてＭＹを次式で補正して、処理を終了する。
【０１３６】
MY = ImageH - WindowH
この補正により、画像表示領域２０１を編集対象画像３００内に納めることができる。
【０１３７】
このように、画像表示領域２０１内に表示される表示画像に編集対象画像３００のみが含まれるように、編集対象画像３００に対する画像表示領域２０１の位置を、編集対象画像３００の幅及び高さの少なくともいずれかの方向において補正できる。これにより、等倍表示モード時に編集対象画像３００が画像表示領域２０１よりも大きく、かつ、画像表示領域２０１内に編集対象画像３００以外が含まれることとなった場合でも、編集対象画像３００のみが含まれるように表示領域を設定できる。
【０１３８】
以上のようにして、画像表示領域２０１の表示位置の補正を行うと、第２の実施形態で説明した表示アシスト機能を利用する際に、画像端の近くの座標をクリックしても、クリック位置が画面中央に来ない場合がある。このような場合、どこが修正されたのかが分からないおそれがある。また、画像中央付近であっても表示領域が大きい場合には、どこが中央なのか正確に把握できないおそれがある。
【０１３９】
そこで本実施形態では、第２の実施形態と同様の処理を行って表示位置の算出を行い、図２３及び図２４で説明した処理に従って表示位置を変更した上で、加工情報が示す位置にマウスカーソルを移動させる。つまり、マウスカーソルの位置が、加工処理の適用位置になる。また、加工内容が分かるよう、加工内容に合わせて欠損領域補間モードかスタンプモードかのいずれかに切り替える。このようにすることで、どの位置にどのような処理を施したのかが正確に把握できるようになる。
【０１４０】
本実施形態では、動作モードに応じてマウス形状を変更する。例えば、図２５に示すように、スタンプモードでは半径スライダ２０９で指定された半径ｒの白い円２５０１を使用する。また、欠損領域補間モード５０３では半径ｒの緑色の円２５０２を、その他の場合は通常の矢印カーソル２５０３を使用する。
【０１４１】
ここで、画像表示領域２０１の左上を基準点とするマウスカーソルの位置Ｐ(Px,Py)の決定方法について述べる。図２３、図２４で説明したような表示位置補正が無い場合、PxとPyは常に
Px = WindowW / 2
Py = WindowH / 2
となる。しかし表示位置が補正されると、Px、Pyは表示位置の補正量に応じて値が変化する。ここで、Px、Pyの補正量をPFx、PFyとすると、Px、Pyは次式で表される。
【０１４２】
Px = WindowW / 2 + PFx
Py = WindowH / 2 + PFy
ここで、PFx、PFyの初期値は０である。表示位置補正が行われた場合のPFx、PFyの算出方法を以下に説明する。図２３のステップＳ２３０５でＭＸが０に設定される以前の値ＭＸと、ステップＳ２３０７で補正された値ＭＸ’とを用いると、PFxは以下のように求められる。
【０１４３】
PFx = MX - MX'
PFyもPFxと同様に、ステップＳ２４０５でＭＹが０に設定される以前の値ＭＹと、ステップＳ２４０７で補正された値ＭＹ’とを用いると、PFxは以下のように求められる。
【０１４４】
PFy = MY - MY'
このようにして、画像表示領域２０１の表示位置の補正が行われた場合であっても、マウスカーソルの位置と形状を変更することで、直前に加工した画像について、どの位置にどのような処理を施したかが正確に把握できるようになる。
【０１４５】
以上説明したように、本発明の画像編集装置を用いれば、元画像を破壊することなく画像加工処理を行うことができ、なおかつ複数の画像を扱う場合でも効率よく加工処理を遂行することが可能になる。
【０１４６】
［その他の実施形態］
なお、本発明は、複数の機器（例えばホストコンピュータ、インタフェイス機器、リーダ、プリンタなど）から構成されるシステムに適用しても、一つの機器からなる装置（例えば、複写機、ファクシミリ装置など）に適用してもよい。
【０１４７】
また、本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体（または記録媒体）を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ（またはＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読み出し実行することによっても、達成されることは言うまでもない。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム（ＯＳ）などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【０１４８】
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【図面の簡単な説明】
【０１４９】
【図１】本発明の実施形態に対応する画像編集装置の構成の一例を示す図である。
【図２】本発明の実施形態に対応するＧＵＩの一例を示す図である。
【図３】本発明の実施形態に対応するＧＵＩ入力に応じて保持されるデータの一例を示す図である。
【図４】本発明の実施形態に対応するＧＵＩの状態遷移の一例を示す図である。
【図５】本発明の実施形態に対応する等倍モード４０２における状態遷移の一例を示す図である。
【図６】本発明の実施形態に対応する欠損領域補間処理の一例を示すフローチャートである。
【図７】本発明の実施形態に対応する複製マスクの一例を示す図である。
【図８】本発明の実施形態に対応する編集対象画像３００の変更処理の一例を示すフローチャートである。
【図９】本発明の実施形態に対応するプレビュー画像の更新処理の一例を示すフローチャートである。
【図１０】本発明の実施形態に対応する保存ボタン２０６によって付与されるデータ形式の一例を示す図である。
【図１１】本発明の実施形態に対応する加工情報１０００の読み込み処理の一例を示すフローチャートである。
【図１２】本発明の実施形態に対応する加工情報のペースト処理の一例を示すフローチャートである。
【図１３】本発明の第１の実施形態に対応する編集対象画像３００の変更時の処理の一例を示すフローチャートである。
【図１４】本発明の第２の実施形態に対応する表示座標テーブル１４００の一例を示す図である。
【図１５】本発明の第２の実施形態に対応する加工情報スタック３０４から表示座標テーブル１４００を生成する処理の一例を示すフローチャートである。
【図１６】本発明の実施形態に対応する領域複製処理の一例を示すフローチャートである。
【図１７】本発明の実施形態に対応する欠損領域補間処理および領域複製処理結果を加工情報スタック３０４に登録する処理の一例を示すフローチャートである。
【図１８】本発明の第２の実施形態に対応する表示座標の更新処理の一例を示すフローチャートである。
【図１９】本発明の第２の実施形態に対応する表示位置アシスト機能の一例を示す図である。
【図２０】表示位置の補正処理の概要を表す図である。
【図２１】本発明の第３の実施形態に対応するfit表示時の表示パラメータを示す図である。
【図２２】本発明の第３の実施形態に対応する等倍表示時の表示パラメータを示す図である。
【図２３】本発明の第３の実施形態に対応するX軸方向の表示パラメータ算出処理の流れを示すフローチャートである。
【図２４】本発明の第３の実施形態に対応するY軸方向の表示パラメータ算出処理の流れを示すフローチャートである。
【図２５】本発明の第３の実施形態に対応するカーソル形状の遷移を表す図である。
【図１】
0004652978.tif 000002
【図２】
0004652978.tif 000003
【図３】
0004652978.tif 000004
【図４】
0004652978.tif 000005
【図５】
0004652978.tif 000006
【図６】
0004652978.tif 000007
【図７】
0004652978.tif 000008
【図８】
0004652978.tif 000009
【図９】
0004652978.tif 000010
【図１０】
0004652978.tif 000011
【図１１】
0004652978.tif 000012
【図１２】
0004652978.tif 000013
【図１３】
0004652978.tif 000014
【図１４】
0004652978.tif 000015
【図１５】
0004652978.tif 000016
【図１６】
0004652978.tif 000017
【図１７】
0004652978.tif 000018
【図１８】
0004652978.tif 000019
【図１９】
0004652978.tif 000020
【図２０】
0004652978.tif 000021
【図２１】
0004652978.tif 000022
【図２２】
0004652978.tif 000023
【図２３】
0004652978.tif 000024
【図２４】
0004652978.tif 000025
【図２５】
0004652978.tif 000026