情報処理装置、情報処理方法、およびプログラム
【課題】 縦横比が同じ任意枚数の画像を表示領域に枠を揃えて隙間無く詰め込んで自動的にレイアウトする。
【解決手段】複数枚の画像の画像枚数を計数する計数部と、計数された画像枚数の平方根以上の整数の値をnとして、表示領域に隙間無くレイアウトする際に最小サイズとなり且つ縦横比を有する単位画像に対する表示領域の一辺のそれぞれの長さとしてn×nの大きさを有する表示領域を設定する設定部と、計数された画像枚数と、設定された整数の値nとに基づいて、単位画像に対して一辺の長さがそれぞれ同じ整数倍である一または複数サイズの拡大画像と単位画像とを表示領域に隙間無くレイアウトするために必要な、一または複数サイズの拡大画像のそれぞれの必要枚数を算出する算出部と、算出された一または複数サイズの拡大画像のそれぞれの必要枚数に基づいて、一または複数サイズの拡大画像と、単位画像とを表示領域にレイアウトするレイアウト部と、を備える。
【解決手段】複数枚の画像の画像枚数を計数する計数部と、計数された画像枚数の平方根以上の整数の値をnとして、表示領域に隙間無くレイアウトする際に最小サイズとなり且つ縦横比を有する単位画像に対する表示領域の一辺のそれぞれの長さとしてn×nの大きさを有する表示領域を設定する設定部と、計数された画像枚数と、設定された整数の値nとに基づいて、単位画像に対して一辺の長さがそれぞれ同じ整数倍である一または複数サイズの拡大画像と単位画像とを表示領域に隙間無くレイアウトするために必要な、一または複数サイズの拡大画像のそれぞれの必要枚数を算出する算出部と、算出された一または複数サイズの拡大画像のそれぞれの必要枚数に基づいて、一または複数サイズの拡大画像と、単位画像とを表示領域にレイアウトするレイアウト部と、を備える。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、画像レイアウトを行う情報処理装置、情報処理方法、およびプログラムに関する。
【背景技術】
【0002】
従来、画像をレイアウトする場合には、テンプレートを用いてレイアウトを自動的に生成し、自動的に生成されたレイアウトを追加的に修正する場合には、選択画像の縦横変更、拡大・縮小を行う方法がある(例えば、特許文献1参照)。また最近では、複数の画像を1枚の用紙にほぼ隙間無く詰め込んで印刷するサービス「シャッフルプリント(シャッフルプリントは富士フィルム株式会社の商品名)」が開始されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開平9−190546号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
デジタルカメラで撮影した写真を、日付ごとに作成されたフォルダごとに、枠を揃えて隙間無く詰め込んで1ページの用紙に印刷したいという要望がある。
【0005】
しかしながら、特許文献1では、与えられたテンプレートを用いてレイアウトを自動的に生成するが、任意枚数の画像を1ページに枠を揃えて隙間無く詰め込んでレイアウトするものではない。また、写真の間に隙間があったり、レイアウト枠が揃っていない場合がある。
【0006】
また、写真のコマ数が、12、16、48、54、64、70のように決まった枚数のときしか1ページに隙間無く詰め込んでレイアウトすることができない場合がある。さらに、先行例では、任意枚数の画像を1ページに隙間無く詰め込んだままの状態で、容易な操作で自動的に生成されたレイアウトを編集して所望のレイアウトを生成することができない。また、自動的に生成したレイアウトだけではユーザの好みに合致しないことがある。また写真の枚数が多くなるとレイアウト候補の組み合わせの数が膨大になるので、自動的にレイアウトを生成するだけではユーザが所望のレイアウトを得ることが困難である。
【0007】
上記の課題に鑑み、本発明は、縦横比が同じ任意枚数の画像を1ページに枠を揃えて隙間無く詰め込んだレイアウト候補を得ることを目的とする。また、枠を揃えて隙間無く1ページに詰め込むという条件を保ったまま、自動的に生成したレイアウトを容易な操作で編集して所望のレイアウトを得ることを目的とする。
【課題を解決するための手段】
【0008】
上記の目的の少なくとも1つを達成する、本発明に係る情報処理装置は、
画像レイアウトを行う情報処理装置であって、
同一の縦横比を有する複数枚の画像の画像枚数を計数する計数手段と、
前記計数手段により計数された前記画像枚数の平方根以上の整数の値をnとして、前記縦横比を有する表示領域に隙間無くレイアウトする際に最小サイズとなり且つ前記縦横比を有する単位画像に対する前記表示領域の一辺のそれぞれの長さとしてn×nの大きさを有する表示領域を設定する設定手段と、
前記計数手段により計数された画像枚数と、前記設定手段により設定された整数の値nとに基づいて、前記単位画像に対して一辺の長さがそれぞれ同じ整数倍である一または複数サイズの拡大画像と前記単位画像とを前記表示領域に隙間無くレイアウトするために必要な、前記一または複数サイズの拡大画像のそれぞれの必要枚数を算出する算出手段と、
前記算出手段により算出された前記一または複数サイズの拡大画像のそれぞれの必要枚数に基づいて、前記一または複数サイズの前記拡大画像と、前記単位画像とを前記表示領域にレイアウトするレイアウト手段と、
を備えることを特徴とする
【発明の効果】
【0009】
本発明によれば、縦横比が同じ任意枚数の画像を1ページに枠を揃えて隙間無く詰め込むレイアウト候補を得ることが可能になる。さらに、枠を揃えて隙間無く1ページに詰め込むという条件を保ったまま、自動的に生成したレイアウトを容易な操作で編集して所望のレイアウトを得ることが可能になる。
【図面の簡単な説明】
【0010】
【図1】(a)画像レイアウト編集装置100の構成を示すブロック図、(b)画像レイアウト編集プログラムの操作画面150を示す図。
【図2】画像レイアウト処理の操作概要を示す図。
【図3】画像レイアウト編集処理の全体の流れを示すフローチャート。
【図4】レイアウト候補の算出を行う処理Aの流れを示すフローチャート。
【図5】レイアウト画像枚数がN=27のとき、本アルゴリズムで得られたレイアウト候補(K、A、B)を示す図。
【図6】基本領域P(I)を設定する処理Bの流れを示すフローチャート。
【図7】基本領域P(I)が設定された状態を示す図。
【図8】設定された基本領域P(I)に画像を描画する処理Cの流れを示す図。
【図9】画像を選択する処理Dの流れを示すフローチャート。
【図10】開始領域番号SIに基本領域番号Iをセットする図。
【図11】画像を「削除/戻す」処理Eの流れを示すフローチャート。
【図12】画像を「削除」する処理が行われる様子を示す図。
【図13】画像を「戻す」処理が行われる様子を示す図。
【図14】選択された画像のシフト可能な位置の算出を行う処理Fの流れを示すフローチャート。
【図15】選択された画像のシフト可能な位置の算出の様子を示す図。
【図16】選択された画像Img[P(I)]をDragしてシフトする処理Gの流れを示すフローチャート。
【図17】選択された画像がシフトする様子を示す図。
【図18】画像を交換する処理Hの流れを示すフローチャート。
【図19】画像を交換する様子を示す図。
【図20】レイアウト候補の算出を行う他の実施例である処理A2の流れを示すフローチャート。
【図21】レイアウト画像枚数がN=28のとき、本アルゴリズムで得られたレイアウト候補(K、A、B、C、D)の例を示す図。
【図22】画面の小さいデジタルカメラに本発明を適用した例を示す図。
【発明を実施するための形態】
【0011】
同一の縦横比を有する複数枚の画像の全てを、同一の縦横比を有する表示領域に重複無く且つ隙間無くレイアウトする情報処理装置(画像レイアウト編集装置)について、以下詳述する。
【0012】
(第1実施形態)
<画像レイアウト編集装置の構成図>
まず、図1(a)を参照して、画像レイアウト編集装置に適用可能な構成を示したブロック構成について説明する。画像レイアウト編集装置100は、CPU101と、ROM102と、RAM103と、画像記憶部104と、表示部105と、操作部106と、入力イベント処理部107とを備える。画像レイアウト編集装置100は、ROM102に記憶された画像レイアウト編集プログラムをCPU101が読み出して実行することによって動作する。RAM103を用いて、画像レイアウト編集プログラムの実行中に使用される変数や画像データの読み書きが行われる。表示部105は、ディスプレイ等である。ユーザは操作部106(例えば、マウス)によって操作を行い、ユーザのマウス操作は入力イベント処理部107によって、マウスDown、マウスUp、マウスDrag、マウスMoveのいずれであるかが解析される。画像記憶部104には日付ごとに画像フォルダが形成されており、画像フォルダにはそれぞれ何枚かの写真の画像が記憶されている。 <画像レイアウト編集装置の操作画面>
次に、図1(b)を参照して、表示部105に表示される画像レイアウト編集プログラムの操作画面150について説明する。操作画面150には、操作ボタン領域151、操作モード表示領域152、フォルダ表示領域153、メインレイアウト表示領域154、メイン画像枚数表示領域155、「削除/戻す」領域156、サブレイアウト表示領域157、サブ画像枚数表示領域158、およびレイアウト候補表示領域159が配置されている。
【0013】
操作ボタン領域151には、「↑」ボタン151a、「↓」ボタン151b、「<」ボタン151c、「>」ボタン151d、「SFT」ボタン151e(画像シフトモードに移る/戻る)、「EX」ボタン151f(画像交換モードに移る/戻る)が配置されている。操作モード表示領域152には、操作モードを説明するテキストが表示される。
【0014】
フォルダ表示領域153には、画像記憶部104に形成された画像フォルダのフォルダ名である、Folder−1、Folder−2、・・・、およびFolder−Nが表示される。メインレイアウト表示領域154には、縦横比が同じ任意の枚数の画像が隙間無くレイアウトされて表示される。
【0015】
メイン画像枚数表示領域155には、メインレイアウト表示領域154に表示された画像の枚数が表示される。サブレイアウト表示領域157には、メインレイアウト表示領域154から削除された画像が表示される。サブ画像枚数表示領域158には、サブレイアウト表示領域157に表示された画像の枚数が表示される。
【0016】
レイアウト候補表示領域159には、レイアウト候補Cand−1、Cand−2、・・・Cand−7が表示される。
【0017】
<マウスによる基本操作>
フォルダの選択では、マウスを操作して「↑」ボタン151aまたは「↓」ボタン151bを押下すると、選択中のフォルダがハイライトされる。ユーザは、Folder−1、Folder−2、・・・、Folder−Nの中から所望の画像フォルダを選択する。レイアウト候補の選択では、マウスを操作して「<」ボタン151cと「>」ボタン151dを押下すると選択中のレイアウト候補がハイライトされる。ユーザは、Cand−1、Cand−2、・・・Cand−7の中から所望のレイアウト候補を選択する。
【0018】
最初、操作モード表示領域152には「画像選択モード」と表示されている。「SFT」ボタン151eを押下すると、画像選択モードから画像シフトモードに移行する。画像シフトモードに移行すると、操作モード表示領域152には「画像シフトモード」と表示される。画像シフトモードでは、「SFT」ボタン151eと「EX」ボタン151fのみがアクティブになり、「↑」ボタン151aと「↓」ボタン151bと「<」ボタン151cと「>」ボタン151dとはロックされる。画像シフトモードから画像選択モードに戻るには、「SFT」ボタン151eを押下する。画像シフトモードから画像交換モードに移るには、「EX」ボタン151fを押下する。画像交換モードに移行すると、操作モード表示領域152には「画像交換モード」と表示される。画像交換モードでは、「EX」ボタン151fのみがアクティブになり、「↑」ボタン151aと「↓」ボタン151bと「<」ボタン151cと「>」ボタン151dと「SFT」ボタン151eとはロックされる。画像交換モードから画像シフトモードに戻るには、「EX」ボタン151fを押下する。
【0019】
メインレイアウト表示領域154に表示された画像を削除するには、削除したい画像をマウスで選択してからドラッグして「削除/戻す」領域156に移動する。すると、選択された画像がメインレイアウト表示領域154から削除されて、削除された画像はサブレイアウト表示領域157に表示される。サブレイアウト表示領域157に表示された画像をメインレイアウト表示領域154に戻して追加したいには、戻したい画像をマウスで選択してからドラッグして「削除/戻す」領域156に移動する。すると、サブレイアウト表示領域157からメインレイアウト表示領域154に画像が戻されて表示される。メインレイアウト表示領域154内での画像のシフト操作および交換操作もマウスのドラッグによって行われる。
【0020】
<レイアウト処理の操作概要>
図2(a)〜(h)を参照して、画像レイアウト編集装置100における、レイアウト処理の操作概要を説明する。
【0021】
画像レイアウト編集プログラムを立ち上げると、画像記憶部104に記憶された画像フォルダおよび各画像フォルダ内の画像ファイルが読み込まれる。読み込んだ画像フォルダ名と各画像フォルダに含まれる画像枚数および画像ファイル名とを記憶して、フォルダ表示領域153に画像フォルダ名を表示する。
【0022】
図2(a)に示すPhase1では、ユーザはマウスで「↑」ボタン151aまたは「↓」ボタン151bを押下して所望の画像フォルダを選択する。画像フォルダが選択されると、選択された画像フォルダがハイライト表示される。
【0023】
図2(b)に示すPhase2では、画像フォルダ内の画像を隙間無く詰め込んでレイアウト表示する処理が実行される。まず画像フォルダ内の画像枚数がカウントされてメイン画像枚数表示領域155に表示される。図2(b)に示す例では、画像枚数は67枚である。次に画像フォルダ内の画像ファイルがメインレイアウト表示領域154に隙間無く詰め込まれて表示される。また同じ画像枚数で拡大画像同士を重複することなく且つ隙間無く詰め込むことができるレイアウト候補がレイアウト候補表示領域159に最大7個表示される。
【0024】
図2(c)に示すPhase3では、優先順位指定部で指定した優先順位に従って画像を並べ替える処理が実行される。例えば顔の含まれている画像を優先するように優先順位指定部で指定する。すると優先順位指定部に含まれる顔認識によって、顔を含む尤度の高い順に画像F1、F2、F3、F4、F5、F6が選出され、読み込まれた画像が優先順位に従って並べ替えられて表示される。画像に対する優先順位の指定は、顔らしさ以外に、時間順、特定のイベントを含む尤度などに基づいて行われてもよい。
【0025】
図2(d)に示すPhase4では、メインレイアウト表示領域154から失敗写真などの不要な画像を削除する処理が実行される。画像を削除するときは、メインレイアウト表示領域154内の不要な画像をマウスで選択して、「削除/戻す」領域156にドラッグする。すると選択された画像がメインレイアウト表示領域154から削除されて、サブレイアウト表示領域157に移動する。削除した画像を戻すときは、サブレイアウト表示領域157内の不要な画像をマウスで選択して、「削除/戻す」領域156にドラッグする。すると選択された画像がサブレイアウト表示領域157からメインレイアウト表示領域154に戻される。
【0026】
図2(e)に示すPhase5では、同じ画像枚数のもとで、別のレイアウト候補を選択する処理が実行される。ユーザはマウスで「<」ボタン151cまたは「>」ボタン151dを押下して、レイアウト候補表示領域159に表示されたレイアウト候補の中から所望の候補を選択する。
【0027】
図2(f)に示すPhase6では、大きいサイズの画像の配置を編集したり画像を交換したりする処理が実行される。画像シフトモードでは大きいサイズの画像をマウスで選択するとシフト可能な位置が表示され、シフト可能な位置に選択した画像をドラッグすると、大きいサイズの画像がシフトする。画像交換モードでは、画像を選択してドラッグすると、ドラッグ元の画像とドラッグ先の画像とが交換される。
【0028】
図2(g)に示すPhase7では、レイアウトが完成した画像を印刷する処理が実行される。すると図2(h)に示すように、任意の枚数の画像が1枚の用紙に隙間無く詰め込んで印刷される。
【0029】
<画像レイアウト編集処理の全体の流れ図>
図3を参照して、画像レイアウト編集処理の全体の流れについて説明する。これは、図2のレイアウト処理の操作概要に対応している。
【0030】
ステップS301において、初期フォルダを設定する。ステップS302において、処理を終了するか否か判定する。終了でなければ(ステップS302;NO)、ステップS303に進む。一方、終了であれば(ステップS302;YES)、処理を終了する。
【0031】
ステップS303において、フォルダ内の画像ファイル数をカウントして変数N0にセットし、画像ファイルを配列Img[0]〜Img[N0−1]に読み込む。
【0032】
ステップS304において、メイン画像枚数MNにN0をセットし、サブ画像枚数SNに0をセットし、レイアウト画像枚数NにN0をセットする。
【0033】
ステップS305の処理Aにおいて、与えられたレイアウト画像枚数Nに対してレイアウト候補の組(K、A、B)[i](i=0、1、・・・)を求める。処理Aについては図4、図5を参照して後述する。
【0034】
ステップS306の処理Bにおいて、メインレイアウト表示領域154とサブレイアウト表示領域157とに画像を配置するための、基本領域P(I)を設定する。処理Bについては図6、図7を参照して後述する。
【0035】
ステップS307の処理Cにおいて、設定された基本領域P(I)の値に従って画像を描画する。処理Cについては図8を参照して後述する。ステップS308において、選択中の画像フォルダがユーザの所望のフォルダであるか否かが判定される。すなわち、選択中の画像フォルダでOKかどうかをユーザに確認する。選択中の画像フォルダがユーザの所望のフォルダであると判定された場合(ステップS308;YES)、ステップS310に進む。一方、選択中の画像フォルダがユーザの所望のフォルダでないと判定された場合(ステップS308;NO)、ステップS309に進む。
【0036】
ステップS309において、次/前のフォルダを選択して、ステップS303に戻る。ステップS310において、優先順位設定部で設定した優先順位でOKかどうかをユーザに確認する。優先順位設定部で設定した優先順位でよいと判断された場合(ステップS310;YES)、ステップS314に進む。一方、優先順位設定部で設定した優先順位ではよくないと判断された場合(ステップS310;NO)、ステップS311に進む。
【0037】
ステップS311において、優先順位を設定する。優先順位設定部は、顔やスマイル、時刻や場所などのいずれを優先して画像を並べ替えるかを設定する。
【0038】
ステップS312において、設定された優先順位に従って画像Img[0]〜Img[N0−1]に尤度が付与され、尤度順に画像が並べ替えられる。ステップS313の処理Cにおいて、尤度順に並べ替えられた画像は、ステップS307と同様に基本領域P(I)の値に従って描画される。その後、ステップS310に戻る。
【0039】
一方、ステップS314において、メイン画像枚数MNにN0をセットし、サブ画像枚数SNに0をセットする。ステップS315において、メインレイアウト表示領域154に表示されている画像セットがOKかどうかをユーザに確認する。メインレイアウト表示領域154に表示されている画像セットでよいと判断された場合(ステップS315;YES)、ステップS321に進む。一方、メインレイアウト表示領域154に表示されている画像セットでよくないと判断された場合(ステップS315;NO)、ステップS316の処理Dに進む。
【0040】
ステップS316の処理Dにおいて、ユーザはマウスDownによって画像を選択する。処理Dについては図9、図10を参照して後述する。ステップS317の処理Eにおいて、ステップS316で選択された画像をメインレイアウト表示領域154からサブレイアウト表示領域157に移動(削除)したり、選択された画像をサブレイアウト表示領域157からメインレイアウト表示領域154に移動(戻す)したりする。処理Eについては図11、図12、図13を参照して後述する。
【0041】
ステップS318の処理Aにおいて、画像を削除したり戻したりした結果、新たなレイアウト画像枚数Nに対して、ステップS305と同様にレイアウト候補の組(K、A、B)[i](i=0、1、・・・)を求める。
【0042】
ステップS319の処理Bにおいて、ステップS306と同様に、メインレイアウト表示領域154とサブレイアウト表示領域157とに画像を配置するための、基本領域P(I)を設定する。ステップS320の処理Cにおいて、ステップS307と同様に、設定された基本領域P(I)の値に従って画像を描画する。その後、ステップS315に戻る。
【0043】
一方、ステップS321において、優先順位設定部によって設定された優先順位に従ってレイアウト候補を並べ替える。ここではレイアウト候補全体に対して設定した尤度に基づいて、尤度順にレイアウト候補を並べ替えてレイアウト候補表示領域159に表示する。
【0044】
ステップS322において、選択中のレイアウト候補でOKかどうかユーザに確認する。選択中のレイアウト候補でよいと判断された場合(ステップS322;YES)、ステップS326に進む。一方、選択中のレイアウト候補でよくないと判断された場合(ステップS322;NO)、ステップS323に進む。
【0045】
ステップS323において、次/前のレイアウト候補を表示して選択する。ステップS324の処理Bにおいて、ステップS306と同様に、メインレイアウト表示領域154とサブレイアウト表示領域157とに画像を配置するための、基本領域P(I)を設定する。
【0046】
ステップS325の処理Cにおいて、ステップS307と同様に、設定された基本領域P(I)の値に従って画像を描画する。その後、ステップS322に戻る。
【0047】
一方、ステップS326において、メインレイアウト表示領域154に表示されているレイアウト画像を印刷するかどうかをユーザに確認する。レイアウト画像を印刷すると判断された場合(ステップS326;YES)、ステップS327に進む。ステップS327において、メインレイアウト表示領域154に表示されている画像を印刷する。一方、レイアウト画像を印刷しないと判断された場合(ステップS327;NO)、ステップS328に進む。
【0048】
ステップS328において、画像をシフトするかどうかをユーザに確認する。画像をシフトしないと判断された場合(ステップS328;NO)、ステップS302に戻る。一方、画像をシフトすると判断された場合(ステップS328;YES)、ステップS329に進む。
【0049】
ステップS329の処理Fにおいて、選択中の画像のシフト可能位置を算出して表示する。処理Fについては図14、図15を参照して後述する。ステップS330の処理Gにおいて、選択中の画像をマウスDragしてシフトする(図17(a)〜(b))。するとマウス操作に応じて、基本領域P(I)の値が書き換えられる(図16、図17(c)〜(d))。処理Gについては図16、図17を参照して後述する。
【0050】
ステップS331の処理Cにおいて、ステップS307と同様に、設定された基本領域P(I)の値に従って画像を描画する(図17(e))。
【0051】
ステップS332において、画像を交換するかどうかをユーザに確認する。画像を交換しないと判断された場合(ステップS332;NO)、ステップS326に戻る。一方、画像を交換すると判断された場合(ステップS332;YES)、ステップS333に進む。
【0052】
ステップ333の処理Dにおいて、ステップS316と同様に、ユーザがマウスDownによって交換元の画像を選択する。ステップS334の処理Hにおいて、ユーザがマウスDragして交換先の画像を選択し(図19(a))、マウスUpによって交換元の画像と交換先の画像を入れ替える(図19)。処理Hについては図18、図19を参照して後述する。
【0053】
ステップS335の処理Cにおいて、ステップS307と同様に、設定された基本領域P(I)の値に従って画像を描画する(図19(c))。その後、ステップS332に戻る。
【0054】
以上で、画像レイアウト編集処理の全体の流れの説明が終了する。以下、処理A、処理B、…、処理Gの各処理の詳細について説明する。
【0055】
<レイアウト候補の算出:処理A>
まず、図4を参照しては、ステップS305におけるレイアウト候補の算出を行う処理Aの流れを説明する。このアルゴリズムでは、表示領域と縦横比が同じN枚の画像を、その表示領域に隙間無く詰め込むときに、最小画像に対して一辺が整数倍(ここでは2倍、3倍)の画像をそれぞれ何枚用いればよいかを算出する。ここで、メインレイアウト表示領域154における各基本領域P(I)の大きさが、最小画像のサイズである。
【0056】
ステップS401において、レイアウト画像枚数Nを計数する。ステップS402において、√N以上の最小の自然数を求めて変数Kにセットする。ここでKは、最小画像の一辺の長さを1としたときの表示領域の一辺の長さである。すなわち、最小画像のサイズが縦H×横Wであるとしたとき、縦KH×横KWのサイズの表示領域を設定する。ただし表示領域の大きさを示す変数Kは、必ずしも計数された画像枚数Nの平方根以上の最小の整数である必要はなく、画像枚数Nの平方根以上の整数であればよい。その整数が値nである場合、n×nの大きさを有する表示領域を設定する。
【0057】
ステップS403において、計数された画像枚数Nと、設定された変数Kの値とに基づいて、単位画像に対して一辺の長さがそれぞれ同じ整数k倍(k=2、3、…、M)である一または複数サイズの拡大画像と単位画像とを表示領域に隙間無くレイアウトするために必要な、一または複数サイズの拡大画像のそれぞれの必要枚数を算出する。ここでは、例えば拡大画像のサイズが2×2(k=2)および3×3(k=3)の2種類である場合を考える。具体的には、D=K×K−3A−8B−Nとセットする。ここで、Dは詰め込み判定関数であり、Aは一辺の長さが最小画像の2倍の画像の枚数、Bは一辺の長さが最小画像の3倍の画像の枚数である。すなわち、上記整数の二乗から、単位画像に対して一辺の長さがそれぞれ2倍の拡大画像の枚数の3倍(22−1倍)の値と、単位画像に対して一辺の長さがそれぞれ3倍の拡大画像の枚数の8倍(32−1倍)の値と、計数された画像枚数とを減算する。値が零となる、2×2(k=2)の拡大画像および3×3(k=3)の拡大画像の組み合わせを算出する。表示領域の一辺の長さKに対して、詰め込み判定関数D=0となる自然数A、Bが存在し、かつ、図5(a)〜(e)のように詰め込んだときに大きい画像同士が重ならないならば(K、A、B)の組はレイアウト候補となる。なお、さらに他のサイズの拡大画像も存在する場合は、詰め込み判定関数Dは、D=K×K−Σ[k=2、3、・・・、M](k2−1)G(k)−Nとなる。上述した例では、G(2)がAに相当し、G(3)がBに相当する。この一般形については後述する。
【0058】
ステップS404において、表示領域の一辺の長さKに対して、詰め込み判定関数D=0となる自然数A、Bがあるかどうかを判定する。詰め込み判定関数D=0となる自然数A、Bがあると判定された場合(ステップS404;YES)、ステップS405に進む。一方、詰め込み判定関数D=0となる自然数A、Bがないと判定された場合(ステップS404;NO)、ステップS408に進む。
【0059】
ステップS405において、大きいサイズの画像(一辺の長さが最小画像の2倍の画像:A枚、3倍の画像:B枚)同士が重ならないかどうか判定する。大きいサイズの画像同士が重なると判定された場合(ステップS405;NO)、ステップS407に進む。一方、大きいサイズの画像同士が重ならないと判定された場合(ステップS405;YES)、ステップS406に進む。ステップS405において、重なり判定は次のように行う。まず、表示領域の左上から右下に向かうラスタースキャン方式で一辺の長さが最小画像の2倍の画像をA枚配置する。次に、表示領域の右下から左上に向かうラスタースキャン方式で一辺の長さが最小画像の3倍の画像をB枚配置する。このように配置したときに、これらの一辺の長さが最小画像の2倍の画像をA枚と、一辺の長さが最小画像の3倍の画像をB枚とが何れも重ならないときに、ステップS405においてYESと判定する。
【0060】
ステップS406において、(K、A、B)の組をレイアウト候補として記憶する。ステップS407において、より多くのレイアウト候補を得たいかどうか判定する。より多くのレイアウト候補を得たいと判定された場合(ステップS407;YES)、ステップS408に進む。一方、より多くのレイアウト候補を得る必要がないと判定された場合(ステップS407;NO)、処理を終了する。
【0061】
ステップS408において、表示画面の一辺の長さKをインクリメントして、ステップS403に戻る。なお、必ずしもインクリメントする必要はなく、所定の整数を加算してもよい。
【0062】
ここで、図5(a)〜(e)は、レイアウト画像枚数がN=27のときに、本アルゴリズムで得られたレイアウト候補(K、A、B)を示す。図5(a)は、レイアウト候補(K、A、B)=(6、3、0)の場合である。図5(b)は、レイアウト候補(K、A、B)=(7、2、2)の場合である。図5(c)は、レイアウト候補(K、A、B)=(8、7、2)の場合である。図5(d)は、レイアウト候補(K、A、B)=(9、10、3)の場合である。図5(e)は、レイアウト候補(K、A、B)=(9、2、6)の場合である。
【0063】
本アルゴリズムでは、大きいサイズの画像として一辺の長さが最小画像の2倍、3倍の画像を用いているが、画像の枚数が2、3、5枚のときは隙間無く詰め込むことができない。そこでN<6のときは例外処理として、図5(f1)〜(f5)に示すように、何枚かの画像を90度回転して詰め込んだり、図5(g2)、(g3)、(g5)のように同じ画像を2回使って詰め込む。
【0064】
以上がレイアウト候補の算出を行う処理Aの詳細である。
【0065】
<基本領域P(I)の設定:処理B>
次に、図6および図7を参照して、基本領域P(I)を設定する処理Bの流れを説明する。この処理で用いるレイアウト候補(K、A、B)は、処理A(図4)のアルゴリズムにおいてレイアウト画像枚数Nにメイン画像枚数MNをセットして算出する。
【0066】
ステップS601において、すべての基本領域番号Iに対して、基本領域P(I)の値を初期化する(P(I)←−1)。すなわち、P(I)を−1で初期化する。ステップS602において、メインレイアウト表示領域154をK×K個の基本領域P(I)に分割する(図7(a))。メインレイアウト表示領域154における各基本領域P(I)の大きさが、最小サイズの画像となる。次に、図7(c)に示すように、メインレイアウト表示領域154内の基本領域P(I)に値を設定する。
【0067】
まずステップS603において、メインレイアウト表示領域154の左上から右下に向かうラスタスキャン方式で、2×2の大きさの4倍領域をA個設定し、4倍領域に数値を0から順番にセットする。4倍領域内の4個の基本領域P(I)には4倍領域に設定した数値と同じ数値をセットする。本発明において、「表示領域の左上から右下に向かうラスタースキャン方式で領域を設定」とは、例えば図7(a)において、P(0)、P(1)、・・・、P(6)、P(7)、P(8)、・・・、のような順番で領域を設定することを言う。
【0068】
次にステップS604において、メインレイアウト表示領域154の右下から左上に向かうラスタスキャン方式で、3×3の大きさの9倍領域をB個設定し、9倍領域に数値を順番にセットする。本発明において、「表示領域の右下から左上に向かうラスタースキャン方式で領域を設定」とは、例えば図7(a)において、P(48)、P(47)、・・・、P(42)、P(41)、P(40)、・・・、のような順番で領域を設定することを言う。
【0069】
さらにステップS605において、残りのMN−A−B個の基本領域P(I)にも数値を順番にセットする。
【0070】
また、ステップS606において、サブレイアウト表示領域157に、SN枚の画像を配置するためにSN個以上の基本領域P(I)を設定する(図7(b))。ステップS607において、図7(d)に示すように、サブレイアウト表示領域157のSN個の基本領域P(I)にも順番に数値をセットする。
【0071】
図7(c)、(d)で示すように、P(0)=0、P(1)=0、P(2)=1、P(3)=1、P(4)=4、P(5)=5、P(6)=6、P(7)=0、P(8)=0、P(9)=1、P(10)=1、P(11)=7、・・・のように基本領域の値がセットされる。
【0072】
以上が基本領域P(I)を設定する処理Bの詳細である。
【0073】
<画像の描画:処理C>
図8を参照して、設定された基本領域P(I)に画像を描画する処理Cの流れを説明する。まず、メインレイアウト表示領域154内の基本領域P(I)の値に応じて画像を描画する(図8(a)〜(b))。ここでは最初に、隣接する3×3の9つの基本領域P(I)が同じ値Jである9倍領域に対しては、一辺の長さが最小画像の3倍の画像Img[J]を描画する。次に、隣接する2×2の4つの基本領域P(I)が同じ値Jである4倍領域に対しては、一辺の長さが最小画像の2倍の画像Img[J]を描画する。最後に、残りの基本領域P(I)=Jに対して、最小画像サイズの画像Img[J]を描画する。
【0074】
さらに、サブレイアウト表示領域157内の基本領域P(I)の値に応じて画像を描画する(図8(c)〜(d))。ここでは基本領域P(I)=Jに対して、画像Img[J]を描画する。このようにして、一または複数サイズの拡大画像のそれぞれの必要枚数に基づいて、拡大画像と単位画像とを表示領域にレイアウトすることができる。
【0075】
以上が、設定された基本領域P(I)に画像を描画する処理Cの詳細である。
【0076】
<画像の選択:処理D>
図9および図10を参照して、画像を選択する処理Dの流れを説明する。まず、ステップS901において、マウスDownした位置(X、Y)を検出する。
【0077】
ステップS902において、マウスDownした位置(X、Y)がメインレイアウト表示領域154内の領域P(I)内にあるか否かが判断される。位置(X、Y)がメインレイアウト表示領域154内の領域P(I)内にあると判断された場合(ステップS902;YES)、ステップS903に進む。一方、位置(X、Y)がメインレイアウト表示領域154内の領域P(I)内にないと判断された場合(ステップS902;NO)、ステップS905に進む。
【0078】
ステップS903において、開始領域番号SIに基本領域番号Iをセットする。ステップS904において、位置(X、Y)にある画像の大きさと範囲を取得する。その後、処理が終了する。
【0079】
また、ステップS905において、マウスDownした位置(X、Y)がサブレイアウト表示領域157内の領域P(I)内にあるか否かが判断される。位置(X、Y)がサブレイアウト表示領域157内の領域P(I)内にあると判断された場合(ステップS905;YES)、ステップS906に進む。一方、位置(X、Y)がサブレイアウト表示領域157内の領域P(I)内にないと判断された場合(ステップS905;NO)、処理が終了する。ステップS906において、開始領域番号SIに基本領域番号Iをセットする。その後、処理が終了する。
【0080】
図10(a)のようなメインレイアウト表示領域154内の矢印の位置でマウスDownが検出されると、開始領域番号SIに矢印が示す番号である32がセットされる。同様に、図10(b)のようなサブレイアウト表示領域157内の矢印の位置でマウスDownが検出されると、開始領域番号SIに矢印が示す番号である52がセットされる。
【0081】
以上が画像を選択する処理Dの詳細である。
【0082】
<画像を「削除/戻す」:処理E>
図11、図12、および図13を参照して、画像を「削除/戻す」処理Eの流れを説明する。
【0083】
ステップS1101において、マウスUpの位置(X、Y)を検出する。ステップS1102において、マウスUpの位置が「削除/戻す」領域156内にあるかどうかを判定する。マウスUpの位置が「削除/戻す」領域156内にあると判定された場合(ステップS1102;YES)、ステップS1103に進む。。一方、マウスUpの位置が「削除/戻す」領域156内にないと判定された場合(ステップS1102;NO)、処理を終了する。
【0084】
ステップS1103において、処理Dで求められた開始領域番号SIに対応する基本領域P(SI)がメインレイアウト表示領域154内にあるかどうか判定する。基本領域P(SI)がメインレイアウト表示領域154内にあると判定された場合(ステップS1103;YES)、ステップS1104に進む。一方、基本領域P(SI)がメインレイアウト表示領域154内にないと判定された場合(ステップS1103;NO)、ステップS1107に進む。
【0085】
ステップS1104において、画像Img[P(SI)]をメインレイアウト表示領域154から削除して、それをサブレイアウト表示領域157の最後の画像Img[MN+SN−1]とする。
【0086】
ステップS1105において、メイン画像枚数MNをディクリメントし、サブ画像枚数SNをインクリメントする。ステップS1106において、レイアウト画像枚数Nにメイン画像枚数MNをセットする。その後、処理を終了する。
【0087】
また、ステップS1107において、処理Dで求められた開始領域番号SIに対応する基本領域P(SI)がサブレイアウト表示領域157内にあるかどうか判定する。基本領域P(SI)がサブレイアウト表示領域157内にあると判定された場合(ステップS1107;YES)、ステップS1108に進む。一方、基本領域P(SI)がサブレイアウト表示領域157内にないと判定された場合(ステップS1107;NO)、処理を終了する。
【0088】
ステップS1108において、画像Img[P(SI)]をサブレイアウト表示領域157から削除して、それをメインレイアウト表示領域154の最初の画像Img[0]とする。
【0089】
ステップS1109において、メイン画像枚数MNをインクリメントし、サブ画像枚数SNをディクリメントする。ステップS1110において、レイアウト画像枚数Nにメイン画像枚数MNをセットする。その後、処理を終了する。
【0090】
図12は画像を「削除」する処理が行われる様子を示す図である。図の矢印で示すように、マウスでメインレイアウト表示領域154内の画像Img[2]を選択して「削除/戻す」領域156にDragする。すると図12(a)の画像Img[2]がメインレイアウト表示領域154から削除されて、図12(b)のサブレイアウト表示領域157の画像Img[38]となる。このとき、メイン画像枚数表示領域155のメイン画像枚数MNは、27から26にディクリメントされ、サブ画像枚数表示領域158のサブ画像枚数SNは、12から13にインクリメントされる。
【0091】
一方、図13は画像を「戻す」処理が行われる様子を示す図である。図の矢印で示すように、マウスでサブレイアウト表示領域157内の画像Img[28]を選択して「削除/戻す」領域156にDragする。すると図13(a)の画像Img[28]がサブレイアウト表示領域157から削除されて、図13(b)のメインレイアウト表示領域154の画像Img[0]となる。このとき、メイン画像枚数表示領域155のメイン画像枚数MNは、19から20にインクリメントされ、サブ画像枚数表示領域158のサブ画像枚数SNは、20から19にディクリメントされる。
【0092】
以上が画像を「削除/戻す」処理Eの詳細である。
【0093】
<画像のシフト:処理F〜G>
図14、図15、図16、及び図17を参照して、画像のシフトを説明する。
【0094】
まず、図14および図15を参照して、指定された画像のシフト可能な位置の算出を行う処理Fの流れを説明する。ユーザにより指定された一または複数サイズの拡大画像または単位画像のうちの1つを縦横方向にシフトした場合に、シフト先に存在する他の拡大画像または単位画像の全てを包含する位置を、シフト可能な表示領域における位置として算出する。
【0095】
ステップS1401において、マウスDownの位置(X、Y)を検出し、位置(X、Y)の基本領域番号Iを求め、画像Img[P(I)]の矩形を求める(図15(a)、(b))。
【0096】
ステップS1402において、画像と画像との境界からなる矩形で、選択した矩形を含み、他の矩形と交わらず、選択した矩形と幅が同じ矩形を探す(図15(c))。
【0097】
ステップS1403において、画像と画像との境界からなる矩形で、選択した矩形を含み、他の矩形と交わらず、選択した矩形と高さが同じ矩形を探す(図15(d))。
【0098】
ステップS1404において、ステップS1402およびステップS1403で得られた矩形の辺のうち、選択した矩形に含まれない辺をシフト可能位置とする(図15(e))。
【0099】
すなわち、図15(a)の位置でマウスDownすると、画像Img[3]がシフト可能位置として、図15(f)のL1、R1、U1、U2が得られる(シフト可能位置算出)。
【0100】
以上が画像のシフト可能な位置の算出を行う処理Fの詳細である。
【0101】
次に、図16および図17を参照して、選択された画像Img[P(I)]をDragしてシフトを実行する処理Gの流れを説明する。
【0102】
ステップS1601において、図17(a)の矢印で示すように画像をマウスDragする。画像をマウスDragしたと判断された場合(ステップS1601;YES)、ステップS1602に進む。一方、画像をマウスDragしていないと判断された場合(ステップS1601;NO)、処理を終了する。
【0103】
ステップS1602において、Drag中のマウス位置(X、Y)がシフト可能位置であるL1、R1、U1、U2のいずれかの一定範囲内に近づいたかどうかを判定する。Drag中のマウス位置(X、Y)がシフト可能位置のいずれかの一定範囲内に近づいたと判定された場合(ステップS1602;YES)、ステップS1603に進む。一方、Drag中のマウス位置(X、Y)がシフト可能位置のいずれかの一定範囲内に近づいていないと判定された場合(ステップS1602;NO)、ステップS1604に進む。
【0104】
ステップS1603において、矢印で示すマウス位置(X、Y)の一定範囲内で最も近くにあるシフト可能位置を太い線で識別表示する(図17(b))。
【0105】
ステップS1604において、マウスUpの有無を判定する。マウスUpされたと判定された場合(ステップS1604;YES)、ステップS1605に進む。一方、マウスUpされていないと判定された場合(ステップS1604;NO)、ステップS1601に戻る。
【0106】
ステップS1605において、マウスUpの位置を算出する(シフト可能位置選択処理)。ここでは図17(c)の位置でマウスUpしたと仮定する。
【0107】
ステップS1606において、マウスDownの位置とマウスUpの位置に応じて基本領域P(I)の値を入れ替える。ここでは最初にマウスDownした位置にあった画像Img[3]に対応する9つの基本領域P(I)の値[3]を2つ上にシフトし、6つの基本領域P(I)の値[11]、[12]、[13]、[18]、[19]、[20]を3つ下にシフトする。その結果、基本領域P(I)の値は図17(d)のように入れ替えられる。図3で説明したように、処理Gの後に画像を描画する処理Cが実行されるので、処理Cによって基本領域P(I)の値に基づいて画像が描画される(図17(e))。その後、処理を終了する。
【0108】
以上が選択された画像Img[P(I)]をDragしてシフトを実行する処理Gの詳細である。
【0109】
<画像の交換:処理H>
図3で説明したように、画像を選択する処理D(画像指定処理)の後に、画像を交換する処理H(画像交換処理)が行われる。図18および図19を参照して、画像を交換する処理Hの流れを説明する。ここでは、例えば図19(a)の矢印で示すように画像Img[8]をマウスで画像Img[3]の位置にDragする。
【0110】
ステップS1801において、基本領域P(SI)にあった画像Img[P(SI)]をマウスでDrag中(図19(b))であるかどうか判定する。Drag中であると判定された場合(ステップS1801;YES)、ステップS1802に進む。一方、Drag中でないと判定された場合(ステップS1801;NO)、処理を終了する。
【0111】
ステップS1802において、マウスUpしたかどうか判定する。マウスUpしたと判定された場合(ステップS1802;YES)、ステップS1803に進む。一方、マウスUpしていないと判定された場合(ステップS1802;NO)、ステップS1801に戻る。
【0112】
ステップS1803において、マウスUpの位置(X、Y)を算出する。ステップS1804において、位置(X、Y)がメインレイアウト表示領域154内のいずれかの基本領域P(I)内にあるかどうかを判定する。位置(X、Y)が基本領域P(I)内にあると判定された場合(ステップS1804;YES)、ステップS1805に進む。一方、位置(X、Y)が基本領域P(I)内にないと判定された場合(ステップS1804;NO)、処理を終了する。
【0113】
ステップS1805において、終了領域番号EIに基本領域番号Iをセットする。ステップS1806において、画像Img[P(SI)]と画像Img[P(EI)]とを交換する。ここでは図19(c)のように、画像Img[8]と画像Img[3]とが交換される。以上が画像を交換する処理Hの詳細である。
【0114】
第1実施形態では、画像枚数が与えられたら、1画面に複数の画像を隙間無く詰め込むための、画面の一辺の長さと、最小画像の枚数と、辺の長さとが最小画像の整数倍(2倍、3倍)の画像の枚数とを算出する。これによって、任意枚数の画像を1画面に隙間無く詰め込むことができるので、省スペースで画面または用紙に無駄が無く、かつ、枠が揃って美しいレイアウトを生成することが可能になる。
【0115】
また、第1実施形態では、選択中のレイアウト候補から選択した画像を削除したり戻したりすることができ、削除や戻す操作で画像枚数が変われば、再び画像を1画面に隙間無く詰め込んでレイアウトする。これによって、失敗画像や失敗写真の削除および削除のやり直しが可能となる。
【0116】
また、第1実施形態では、選択された画像を含み、他の矩形と交わらず、選択された画像と幅が同じで、画像と画像との境界からなる矩形をすべて求め、求めた矩形の上辺と下辺を求める。また、選択された画像を含み、他の矩形と交わらず、選択された画像と高さが同じで、画像と画像との境界からなる矩形をすべて求め、求めた矩形の左辺と右辺を求める。そして、選択された画像のシフト可能な位置をこのように求めた上辺、下辺、左辺、右辺とし、ユーザにわかりやすく表示する。これによって、ユーザは簡単な操作でシフト可能な位置に画像をシフトして、所望のレイアウトを生成することが可能になる。
【0117】
また、第1実施形態では、選択された画像を移動すると、移動先の位置にある画像と選択された画像とを交換する。これによって、所望の位置に所望の画像をレイアウトすることが可能になる。
【0118】
(第2実施形態)
<レイアウト候補の算出を行う他の例:処理A2>
図20および図21を参照して、レイアウト候補の算出を行う他の例である処理A2の流れを説明する。このアルゴリズムでは、表示領域と縦横比が同じN枚の画像を表示領域に隙間無く詰め込むときに、最小画像に対して一辺が整数倍(ここでは2倍、3倍、・・・、M倍)の画像をそれぞれ何枚用いればよいかを算出する。ここで、メインレイアウト表示領域154における各基本領域P(I)の大きさが、最小画像のサイズである。
【0119】
ステップS2001において、レイアウト画像枚数Nをセットする。
【0120】
ステップS2002において、√N以上の最小の自然数を求めて変数Kにセットする。ここでKは、最小画像の一辺の長さを1としたときの表示領域の一辺の長さである。
【0121】
ステップS2003において、詰め込み判定関数D=K×K−Σ[L=2、・・・M](L×L−1)G(L)−Nとセットする。ここで、Σは総和であり、Mは使用される可能性のある最大画像の一辺の長さであり、G(L)は一辺の長さが最小画像のL倍の画像の枚数である。表示領域の一辺の長さKに対して、詰め込み判定関数D=0となる自然数G(L:L=2、・・・M)の組が存在し、かつ、図21(a)〜(j)のように詰め込んだときにL×L(L=2、3、・・・、M)サイズの大きい画像同士が重ならないならば(K、G(L:L=2、・・・M))の組はレイアウト候補となる。
【0122】
ステップS2004において、表示領域の一辺の長さKに対して、詰め込み判定関数D=0となる自然数G(L:L=2、・・・M)の組があるかどうかを判定する。詰め込み判定関数D=0となる自然数G(L:L=2、・・・M)の組があると判定された場合(ステップS2004;YES)、ステップS2005に進む。一方、詰め込み判定関数D=0となる自然数G(L:L=2、・・・M)の組がないと判定された場合(ステップS2004;NO)、ステップS2008に進む。
【0123】
ステップS2005において、大きいサイズの画像同士が所定のレイアウトで重ならずに表示領域に配置できるかどうか判定する。大きいサイズの画像同士が所定のレイアウトで重ならずに配置できると判定された場合(ステップS2005;YES)、ステップS2006に進む。一方、大きいサイズの画像同士が重なると判定された場合(ステップS2005;NO)、ステップS2007に進む。ここで、ステップS2005における重なり判定は、次の処理(S1)〜(S3)ようにして行う。(S1):L(≧2)が偶数のとき、空いている表示領域を左上から右下に向かうラスタスキャン方式でスキャンしてL×Lの大きさの領域を設定可能な領域を探索し、探索した領域に左上から右下に向かうラスタスキャン方式でL×Lの大きさの領域をG(L)個設定する。(S2):L(≧3)が奇数のとき、空いている表示領域を右下から左上に向かうラスタスキャン方式でスキャンしてL×Lの大きさの領域を設定可能な領域を探索し、探索した領域に右下から左上に向かうラスタスキャン方式でL×Lの大きさの領域をG(L)個設定する。(S3):変数L=2、3、・・・、Mに対して、上記(S1)と(S2)の処理を繰り返し行い、全てのL×L(L=2、3、・・・、M)の大きさの領域が重ならなければ、ステップS2005でYESと判定する。
【0124】
ステップS2006において、(K、G(L:L=2、・・・M))の組をレイアウト候補として記憶する。
【0125】
ステップS2007において、もっと多くのレイアウト候補を得たいかどうか判定する。もっと多くのレイアウト候補を得たいと判定された場合(ステップS2007;YES)、ステップS2008に進む。一方、もっと多くのレイアウト候補を得る必要がないと判定された場合(ステップS2007;NO)、処理を終了する。
【0126】
また、ステップS2008において、表示画面の一辺の長さKをインクリメントして、ステップS2003に戻る。
【0127】
図21(a)〜(j)は、レイアウト画像枚数がN=28のとき、本アルゴリズムで得られたレイアウト候補(K、G(2)、G(3)、G(4)、G(5))=(K、A、B、C、D)のいくつかの例を示す。図21(a)は、(K、A、B、C、D)=(6、0、1、0、0)の場合である。図21(b)は、(K、A、B、C、D)=(7、7、0、0、0)の場合である。図21(c)は、(K、A、B、C、D)=(7、2、0、1、0)の場合である。図21(d)は、(K、A、B、C、D)=(8、12、0、0、0)の場合である。図21(e)は、(K、A、B、C、D)=(8、7、0、1、0)の場合である。図21(f)は、(K、A、B、C、D)=(8、4、3、0、0)の場合である。図21(g)は、(K、A、B、C、D)=(8、4、0、0、1)の場合である。図21(h)は、(K、A、B、C、D)=(9、15、1、0、0)の場合である。図21(i)は、(K、A、B、C、D)=(9、7、4、0、0)の場合である。図21(j)は、(K、A、B、C、D)=(9、7、1、0、1)の場合である。第2実施形態では、画像枚数が与えられたら、1画面に複数の画像を隙間無く詰め込むための、画面の一辺の長さと、最小画像の枚数と、辺の長さが最小画像の整数倍(2倍、3倍、4倍、5倍)の画像の枚数とを算出する。これによって、選択した画像を特に大きいサイズで、すなわち辺の長さを最小画像の4倍、5倍としても表示できる。
【0128】
(第3実施形態)
<小画面への適用例>
図22を参照して、本発明を画面の小さいデジタルカメラに適用した例について説明する。本デジタルカメラは本体2200上に、タッチパネルを表面に配置した入力画面2201と操作ボタン類2202とが配備されている。
【0129】
まず、図22(a)のように操作ボタン類2202を操作して、日付ごとに作成された写真フォルダを選択する。
【0130】
写真フォルダを選択すると図22(b)のように、選択されたフォルダ内の写真が読み込まれ、入力画面に隙間無く詰め込まれてレイアウトされ表示される。ここで、ユーザが指で画面の画像IAの位置をタッチする。
【0131】
指の大きさは画面上の最小画像サイズより大きいので、指でタッチした位置の中心を算出し、タッチ位置中心にある画像IAと操作メニュー(「削除」、「シフト」、「交換」)を拡大表示する(図22(c))。ここで、ユーザが「削除」メニューをタッチする。
【0132】
すると、画像IAが削除され、新たな枚数でレイアウト候補が算出されて、図22(d)のようになる。次に、ユーザが指で画面に画像IBの位置をタッチする(図22(d))。
【0133】
すると、指でタッチした位置の中心を算出し、タッチ位置中心にある画像IBと操作メニュー(「削除」、「シフト」、「交換」)を拡大表示する(図22(e))。ここで、ユーザが「シフト」メニューをタッチする。
【0134】
すると、図22(f)のように、画像IBをシフト可能な位置が表示される。ここで、図22(f)の矢印で示す位置をユーザが指でなぞって画像をドラッグする。すると、図22(g)に示すように画像IBがシフトする。次に、ユーザが指で画面に画像ICの位置をタッチする(図22(g))。すると、指でタッチした位置の中心を算出し、タッチ位置中心にある画像ICと操作メニュー(「削除」、「シフト」、「交換」)を拡大表示する(図22(h))。ここで、ユーザが「交換」メニューをタッチする。すると、図22(i)で示すように、画像ICが指で操作可能な大きさに拡大表示される。図22(i)の矢印で示すようにユーザが指でなぞって画像ICを画像IBの位置にドラッグする。すると、図22(j)に示すように画像ICと画像IBとが交換される。
【0135】
第3実施形態では、画像を選択すると、選択された画像および画像の操作メニューを拡大表示する。選択された画像を指でなぞってドラッグしたり、操作メニューを指でタッチしたりすることで、本発明を小画面の機器に適用することが可能になる。
【0136】
(第4実施形態)
また、小さいタッチパネル画面のデジタルカメラやプリンタのような機器に本発明を適用してレイアウト編集を行う場合には、大きい画像は表示するが、小さい画像は表示せずレイアウト枠のみ表示するようにしてもよい。また、大きいサイズの画像のみシフトや交換ができるようにしてもよい。このとき、大きいサイズの画像の領域のみタッチ操作を受け付けて、小さいサイズの画像の領域はタッチ操作を受け付けないようにしてもよい。
【0137】
第4実施形態では、小さいサイズの画像は表示せずレイアウト枠のみ表示し、大きいサイズの画像のみシフトや交換ができるようにすることで、小さい画面のタッチパネルによる誤操作を防止できる。
【0138】
(その他の実施形態)
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
【技術分野】
【0001】
本発明は、画像レイアウトを行う情報処理装置、情報処理方法、およびプログラムに関する。
【背景技術】
【0002】
従来、画像をレイアウトする場合には、テンプレートを用いてレイアウトを自動的に生成し、自動的に生成されたレイアウトを追加的に修正する場合には、選択画像の縦横変更、拡大・縮小を行う方法がある(例えば、特許文献1参照)。また最近では、複数の画像を1枚の用紙にほぼ隙間無く詰め込んで印刷するサービス「シャッフルプリント(シャッフルプリントは富士フィルム株式会社の商品名)」が開始されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開平9−190546号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
デジタルカメラで撮影した写真を、日付ごとに作成されたフォルダごとに、枠を揃えて隙間無く詰め込んで1ページの用紙に印刷したいという要望がある。
【0005】
しかしながら、特許文献1では、与えられたテンプレートを用いてレイアウトを自動的に生成するが、任意枚数の画像を1ページに枠を揃えて隙間無く詰め込んでレイアウトするものではない。また、写真の間に隙間があったり、レイアウト枠が揃っていない場合がある。
【0006】
また、写真のコマ数が、12、16、48、54、64、70のように決まった枚数のときしか1ページに隙間無く詰め込んでレイアウトすることができない場合がある。さらに、先行例では、任意枚数の画像を1ページに隙間無く詰め込んだままの状態で、容易な操作で自動的に生成されたレイアウトを編集して所望のレイアウトを生成することができない。また、自動的に生成したレイアウトだけではユーザの好みに合致しないことがある。また写真の枚数が多くなるとレイアウト候補の組み合わせの数が膨大になるので、自動的にレイアウトを生成するだけではユーザが所望のレイアウトを得ることが困難である。
【0007】
上記の課題に鑑み、本発明は、縦横比が同じ任意枚数の画像を1ページに枠を揃えて隙間無く詰め込んだレイアウト候補を得ることを目的とする。また、枠を揃えて隙間無く1ページに詰め込むという条件を保ったまま、自動的に生成したレイアウトを容易な操作で編集して所望のレイアウトを得ることを目的とする。
【課題を解決するための手段】
【0008】
上記の目的の少なくとも1つを達成する、本発明に係る情報処理装置は、
画像レイアウトを行う情報処理装置であって、
同一の縦横比を有する複数枚の画像の画像枚数を計数する計数手段と、
前記計数手段により計数された前記画像枚数の平方根以上の整数の値をnとして、前記縦横比を有する表示領域に隙間無くレイアウトする際に最小サイズとなり且つ前記縦横比を有する単位画像に対する前記表示領域の一辺のそれぞれの長さとしてn×nの大きさを有する表示領域を設定する設定手段と、
前記計数手段により計数された画像枚数と、前記設定手段により設定された整数の値nとに基づいて、前記単位画像に対して一辺の長さがそれぞれ同じ整数倍である一または複数サイズの拡大画像と前記単位画像とを前記表示領域に隙間無くレイアウトするために必要な、前記一または複数サイズの拡大画像のそれぞれの必要枚数を算出する算出手段と、
前記算出手段により算出された前記一または複数サイズの拡大画像のそれぞれの必要枚数に基づいて、前記一または複数サイズの前記拡大画像と、前記単位画像とを前記表示領域にレイアウトするレイアウト手段と、
を備えることを特徴とする
【発明の効果】
【0009】
本発明によれば、縦横比が同じ任意枚数の画像を1ページに枠を揃えて隙間無く詰め込むレイアウト候補を得ることが可能になる。さらに、枠を揃えて隙間無く1ページに詰め込むという条件を保ったまま、自動的に生成したレイアウトを容易な操作で編集して所望のレイアウトを得ることが可能になる。
【図面の簡単な説明】
【0010】
【図1】(a)画像レイアウト編集装置100の構成を示すブロック図、(b)画像レイアウト編集プログラムの操作画面150を示す図。
【図2】画像レイアウト処理の操作概要を示す図。
【図3】画像レイアウト編集処理の全体の流れを示すフローチャート。
【図4】レイアウト候補の算出を行う処理Aの流れを示すフローチャート。
【図5】レイアウト画像枚数がN=27のとき、本アルゴリズムで得られたレイアウト候補(K、A、B)を示す図。
【図6】基本領域P(I)を設定する処理Bの流れを示すフローチャート。
【図7】基本領域P(I)が設定された状態を示す図。
【図8】設定された基本領域P(I)に画像を描画する処理Cの流れを示す図。
【図9】画像を選択する処理Dの流れを示すフローチャート。
【図10】開始領域番号SIに基本領域番号Iをセットする図。
【図11】画像を「削除/戻す」処理Eの流れを示すフローチャート。
【図12】画像を「削除」する処理が行われる様子を示す図。
【図13】画像を「戻す」処理が行われる様子を示す図。
【図14】選択された画像のシフト可能な位置の算出を行う処理Fの流れを示すフローチャート。
【図15】選択された画像のシフト可能な位置の算出の様子を示す図。
【図16】選択された画像Img[P(I)]をDragしてシフトする処理Gの流れを示すフローチャート。
【図17】選択された画像がシフトする様子を示す図。
【図18】画像を交換する処理Hの流れを示すフローチャート。
【図19】画像を交換する様子を示す図。
【図20】レイアウト候補の算出を行う他の実施例である処理A2の流れを示すフローチャート。
【図21】レイアウト画像枚数がN=28のとき、本アルゴリズムで得られたレイアウト候補(K、A、B、C、D)の例を示す図。
【図22】画面の小さいデジタルカメラに本発明を適用した例を示す図。
【発明を実施するための形態】
【0011】
同一の縦横比を有する複数枚の画像の全てを、同一の縦横比を有する表示領域に重複無く且つ隙間無くレイアウトする情報処理装置(画像レイアウト編集装置)について、以下詳述する。
【0012】
(第1実施形態)
<画像レイアウト編集装置の構成図>
まず、図1(a)を参照して、画像レイアウト編集装置に適用可能な構成を示したブロック構成について説明する。画像レイアウト編集装置100は、CPU101と、ROM102と、RAM103と、画像記憶部104と、表示部105と、操作部106と、入力イベント処理部107とを備える。画像レイアウト編集装置100は、ROM102に記憶された画像レイアウト編集プログラムをCPU101が読み出して実行することによって動作する。RAM103を用いて、画像レイアウト編集プログラムの実行中に使用される変数や画像データの読み書きが行われる。表示部105は、ディスプレイ等である。ユーザは操作部106(例えば、マウス)によって操作を行い、ユーザのマウス操作は入力イベント処理部107によって、マウスDown、マウスUp、マウスDrag、マウスMoveのいずれであるかが解析される。画像記憶部104には日付ごとに画像フォルダが形成されており、画像フォルダにはそれぞれ何枚かの写真の画像が記憶されている。 <画像レイアウト編集装置の操作画面>
次に、図1(b)を参照して、表示部105に表示される画像レイアウト編集プログラムの操作画面150について説明する。操作画面150には、操作ボタン領域151、操作モード表示領域152、フォルダ表示領域153、メインレイアウト表示領域154、メイン画像枚数表示領域155、「削除/戻す」領域156、サブレイアウト表示領域157、サブ画像枚数表示領域158、およびレイアウト候補表示領域159が配置されている。
【0013】
操作ボタン領域151には、「↑」ボタン151a、「↓」ボタン151b、「<」ボタン151c、「>」ボタン151d、「SFT」ボタン151e(画像シフトモードに移る/戻る)、「EX」ボタン151f(画像交換モードに移る/戻る)が配置されている。操作モード表示領域152には、操作モードを説明するテキストが表示される。
【0014】
フォルダ表示領域153には、画像記憶部104に形成された画像フォルダのフォルダ名である、Folder−1、Folder−2、・・・、およびFolder−Nが表示される。メインレイアウト表示領域154には、縦横比が同じ任意の枚数の画像が隙間無くレイアウトされて表示される。
【0015】
メイン画像枚数表示領域155には、メインレイアウト表示領域154に表示された画像の枚数が表示される。サブレイアウト表示領域157には、メインレイアウト表示領域154から削除された画像が表示される。サブ画像枚数表示領域158には、サブレイアウト表示領域157に表示された画像の枚数が表示される。
【0016】
レイアウト候補表示領域159には、レイアウト候補Cand−1、Cand−2、・・・Cand−7が表示される。
【0017】
<マウスによる基本操作>
フォルダの選択では、マウスを操作して「↑」ボタン151aまたは「↓」ボタン151bを押下すると、選択中のフォルダがハイライトされる。ユーザは、Folder−1、Folder−2、・・・、Folder−Nの中から所望の画像フォルダを選択する。レイアウト候補の選択では、マウスを操作して「<」ボタン151cと「>」ボタン151dを押下すると選択中のレイアウト候補がハイライトされる。ユーザは、Cand−1、Cand−2、・・・Cand−7の中から所望のレイアウト候補を選択する。
【0018】
最初、操作モード表示領域152には「画像選択モード」と表示されている。「SFT」ボタン151eを押下すると、画像選択モードから画像シフトモードに移行する。画像シフトモードに移行すると、操作モード表示領域152には「画像シフトモード」と表示される。画像シフトモードでは、「SFT」ボタン151eと「EX」ボタン151fのみがアクティブになり、「↑」ボタン151aと「↓」ボタン151bと「<」ボタン151cと「>」ボタン151dとはロックされる。画像シフトモードから画像選択モードに戻るには、「SFT」ボタン151eを押下する。画像シフトモードから画像交換モードに移るには、「EX」ボタン151fを押下する。画像交換モードに移行すると、操作モード表示領域152には「画像交換モード」と表示される。画像交換モードでは、「EX」ボタン151fのみがアクティブになり、「↑」ボタン151aと「↓」ボタン151bと「<」ボタン151cと「>」ボタン151dと「SFT」ボタン151eとはロックされる。画像交換モードから画像シフトモードに戻るには、「EX」ボタン151fを押下する。
【0019】
メインレイアウト表示領域154に表示された画像を削除するには、削除したい画像をマウスで選択してからドラッグして「削除/戻す」領域156に移動する。すると、選択された画像がメインレイアウト表示領域154から削除されて、削除された画像はサブレイアウト表示領域157に表示される。サブレイアウト表示領域157に表示された画像をメインレイアウト表示領域154に戻して追加したいには、戻したい画像をマウスで選択してからドラッグして「削除/戻す」領域156に移動する。すると、サブレイアウト表示領域157からメインレイアウト表示領域154に画像が戻されて表示される。メインレイアウト表示領域154内での画像のシフト操作および交換操作もマウスのドラッグによって行われる。
【0020】
<レイアウト処理の操作概要>
図2(a)〜(h)を参照して、画像レイアウト編集装置100における、レイアウト処理の操作概要を説明する。
【0021】
画像レイアウト編集プログラムを立ち上げると、画像記憶部104に記憶された画像フォルダおよび各画像フォルダ内の画像ファイルが読み込まれる。読み込んだ画像フォルダ名と各画像フォルダに含まれる画像枚数および画像ファイル名とを記憶して、フォルダ表示領域153に画像フォルダ名を表示する。
【0022】
図2(a)に示すPhase1では、ユーザはマウスで「↑」ボタン151aまたは「↓」ボタン151bを押下して所望の画像フォルダを選択する。画像フォルダが選択されると、選択された画像フォルダがハイライト表示される。
【0023】
図2(b)に示すPhase2では、画像フォルダ内の画像を隙間無く詰め込んでレイアウト表示する処理が実行される。まず画像フォルダ内の画像枚数がカウントされてメイン画像枚数表示領域155に表示される。図2(b)に示す例では、画像枚数は67枚である。次に画像フォルダ内の画像ファイルがメインレイアウト表示領域154に隙間無く詰め込まれて表示される。また同じ画像枚数で拡大画像同士を重複することなく且つ隙間無く詰め込むことができるレイアウト候補がレイアウト候補表示領域159に最大7個表示される。
【0024】
図2(c)に示すPhase3では、優先順位指定部で指定した優先順位に従って画像を並べ替える処理が実行される。例えば顔の含まれている画像を優先するように優先順位指定部で指定する。すると優先順位指定部に含まれる顔認識によって、顔を含む尤度の高い順に画像F1、F2、F3、F4、F5、F6が選出され、読み込まれた画像が優先順位に従って並べ替えられて表示される。画像に対する優先順位の指定は、顔らしさ以外に、時間順、特定のイベントを含む尤度などに基づいて行われてもよい。
【0025】
図2(d)に示すPhase4では、メインレイアウト表示領域154から失敗写真などの不要な画像を削除する処理が実行される。画像を削除するときは、メインレイアウト表示領域154内の不要な画像をマウスで選択して、「削除/戻す」領域156にドラッグする。すると選択された画像がメインレイアウト表示領域154から削除されて、サブレイアウト表示領域157に移動する。削除した画像を戻すときは、サブレイアウト表示領域157内の不要な画像をマウスで選択して、「削除/戻す」領域156にドラッグする。すると選択された画像がサブレイアウト表示領域157からメインレイアウト表示領域154に戻される。
【0026】
図2(e)に示すPhase5では、同じ画像枚数のもとで、別のレイアウト候補を選択する処理が実行される。ユーザはマウスで「<」ボタン151cまたは「>」ボタン151dを押下して、レイアウト候補表示領域159に表示されたレイアウト候補の中から所望の候補を選択する。
【0027】
図2(f)に示すPhase6では、大きいサイズの画像の配置を編集したり画像を交換したりする処理が実行される。画像シフトモードでは大きいサイズの画像をマウスで選択するとシフト可能な位置が表示され、シフト可能な位置に選択した画像をドラッグすると、大きいサイズの画像がシフトする。画像交換モードでは、画像を選択してドラッグすると、ドラッグ元の画像とドラッグ先の画像とが交換される。
【0028】
図2(g)に示すPhase7では、レイアウトが完成した画像を印刷する処理が実行される。すると図2(h)に示すように、任意の枚数の画像が1枚の用紙に隙間無く詰め込んで印刷される。
【0029】
<画像レイアウト編集処理の全体の流れ図>
図3を参照して、画像レイアウト編集処理の全体の流れについて説明する。これは、図2のレイアウト処理の操作概要に対応している。
【0030】
ステップS301において、初期フォルダを設定する。ステップS302において、処理を終了するか否か判定する。終了でなければ(ステップS302;NO)、ステップS303に進む。一方、終了であれば(ステップS302;YES)、処理を終了する。
【0031】
ステップS303において、フォルダ内の画像ファイル数をカウントして変数N0にセットし、画像ファイルを配列Img[0]〜Img[N0−1]に読み込む。
【0032】
ステップS304において、メイン画像枚数MNにN0をセットし、サブ画像枚数SNに0をセットし、レイアウト画像枚数NにN0をセットする。
【0033】
ステップS305の処理Aにおいて、与えられたレイアウト画像枚数Nに対してレイアウト候補の組(K、A、B)[i](i=0、1、・・・)を求める。処理Aについては図4、図5を参照して後述する。
【0034】
ステップS306の処理Bにおいて、メインレイアウト表示領域154とサブレイアウト表示領域157とに画像を配置するための、基本領域P(I)を設定する。処理Bについては図6、図7を参照して後述する。
【0035】
ステップS307の処理Cにおいて、設定された基本領域P(I)の値に従って画像を描画する。処理Cについては図8を参照して後述する。ステップS308において、選択中の画像フォルダがユーザの所望のフォルダであるか否かが判定される。すなわち、選択中の画像フォルダでOKかどうかをユーザに確認する。選択中の画像フォルダがユーザの所望のフォルダであると判定された場合(ステップS308;YES)、ステップS310に進む。一方、選択中の画像フォルダがユーザの所望のフォルダでないと判定された場合(ステップS308;NO)、ステップS309に進む。
【0036】
ステップS309において、次/前のフォルダを選択して、ステップS303に戻る。ステップS310において、優先順位設定部で設定した優先順位でOKかどうかをユーザに確認する。優先順位設定部で設定した優先順位でよいと判断された場合(ステップS310;YES)、ステップS314に進む。一方、優先順位設定部で設定した優先順位ではよくないと判断された場合(ステップS310;NO)、ステップS311に進む。
【0037】
ステップS311において、優先順位を設定する。優先順位設定部は、顔やスマイル、時刻や場所などのいずれを優先して画像を並べ替えるかを設定する。
【0038】
ステップS312において、設定された優先順位に従って画像Img[0]〜Img[N0−1]に尤度が付与され、尤度順に画像が並べ替えられる。ステップS313の処理Cにおいて、尤度順に並べ替えられた画像は、ステップS307と同様に基本領域P(I)の値に従って描画される。その後、ステップS310に戻る。
【0039】
一方、ステップS314において、メイン画像枚数MNにN0をセットし、サブ画像枚数SNに0をセットする。ステップS315において、メインレイアウト表示領域154に表示されている画像セットがOKかどうかをユーザに確認する。メインレイアウト表示領域154に表示されている画像セットでよいと判断された場合(ステップS315;YES)、ステップS321に進む。一方、メインレイアウト表示領域154に表示されている画像セットでよくないと判断された場合(ステップS315;NO)、ステップS316の処理Dに進む。
【0040】
ステップS316の処理Dにおいて、ユーザはマウスDownによって画像を選択する。処理Dについては図9、図10を参照して後述する。ステップS317の処理Eにおいて、ステップS316で選択された画像をメインレイアウト表示領域154からサブレイアウト表示領域157に移動(削除)したり、選択された画像をサブレイアウト表示領域157からメインレイアウト表示領域154に移動(戻す)したりする。処理Eについては図11、図12、図13を参照して後述する。
【0041】
ステップS318の処理Aにおいて、画像を削除したり戻したりした結果、新たなレイアウト画像枚数Nに対して、ステップS305と同様にレイアウト候補の組(K、A、B)[i](i=0、1、・・・)を求める。
【0042】
ステップS319の処理Bにおいて、ステップS306と同様に、メインレイアウト表示領域154とサブレイアウト表示領域157とに画像を配置するための、基本領域P(I)を設定する。ステップS320の処理Cにおいて、ステップS307と同様に、設定された基本領域P(I)の値に従って画像を描画する。その後、ステップS315に戻る。
【0043】
一方、ステップS321において、優先順位設定部によって設定された優先順位に従ってレイアウト候補を並べ替える。ここではレイアウト候補全体に対して設定した尤度に基づいて、尤度順にレイアウト候補を並べ替えてレイアウト候補表示領域159に表示する。
【0044】
ステップS322において、選択中のレイアウト候補でOKかどうかユーザに確認する。選択中のレイアウト候補でよいと判断された場合(ステップS322;YES)、ステップS326に進む。一方、選択中のレイアウト候補でよくないと判断された場合(ステップS322;NO)、ステップS323に進む。
【0045】
ステップS323において、次/前のレイアウト候補を表示して選択する。ステップS324の処理Bにおいて、ステップS306と同様に、メインレイアウト表示領域154とサブレイアウト表示領域157とに画像を配置するための、基本領域P(I)を設定する。
【0046】
ステップS325の処理Cにおいて、ステップS307と同様に、設定された基本領域P(I)の値に従って画像を描画する。その後、ステップS322に戻る。
【0047】
一方、ステップS326において、メインレイアウト表示領域154に表示されているレイアウト画像を印刷するかどうかをユーザに確認する。レイアウト画像を印刷すると判断された場合(ステップS326;YES)、ステップS327に進む。ステップS327において、メインレイアウト表示領域154に表示されている画像を印刷する。一方、レイアウト画像を印刷しないと判断された場合(ステップS327;NO)、ステップS328に進む。
【0048】
ステップS328において、画像をシフトするかどうかをユーザに確認する。画像をシフトしないと判断された場合(ステップS328;NO)、ステップS302に戻る。一方、画像をシフトすると判断された場合(ステップS328;YES)、ステップS329に進む。
【0049】
ステップS329の処理Fにおいて、選択中の画像のシフト可能位置を算出して表示する。処理Fについては図14、図15を参照して後述する。ステップS330の処理Gにおいて、選択中の画像をマウスDragしてシフトする(図17(a)〜(b))。するとマウス操作に応じて、基本領域P(I)の値が書き換えられる(図16、図17(c)〜(d))。処理Gについては図16、図17を参照して後述する。
【0050】
ステップS331の処理Cにおいて、ステップS307と同様に、設定された基本領域P(I)の値に従って画像を描画する(図17(e))。
【0051】
ステップS332において、画像を交換するかどうかをユーザに確認する。画像を交換しないと判断された場合(ステップS332;NO)、ステップS326に戻る。一方、画像を交換すると判断された場合(ステップS332;YES)、ステップS333に進む。
【0052】
ステップ333の処理Dにおいて、ステップS316と同様に、ユーザがマウスDownによって交換元の画像を選択する。ステップS334の処理Hにおいて、ユーザがマウスDragして交換先の画像を選択し(図19(a))、マウスUpによって交換元の画像と交換先の画像を入れ替える(図19)。処理Hについては図18、図19を参照して後述する。
【0053】
ステップS335の処理Cにおいて、ステップS307と同様に、設定された基本領域P(I)の値に従って画像を描画する(図19(c))。その後、ステップS332に戻る。
【0054】
以上で、画像レイアウト編集処理の全体の流れの説明が終了する。以下、処理A、処理B、…、処理Gの各処理の詳細について説明する。
【0055】
<レイアウト候補の算出:処理A>
まず、図4を参照しては、ステップS305におけるレイアウト候補の算出を行う処理Aの流れを説明する。このアルゴリズムでは、表示領域と縦横比が同じN枚の画像を、その表示領域に隙間無く詰め込むときに、最小画像に対して一辺が整数倍(ここでは2倍、3倍)の画像をそれぞれ何枚用いればよいかを算出する。ここで、メインレイアウト表示領域154における各基本領域P(I)の大きさが、最小画像のサイズである。
【0056】
ステップS401において、レイアウト画像枚数Nを計数する。ステップS402において、√N以上の最小の自然数を求めて変数Kにセットする。ここでKは、最小画像の一辺の長さを1としたときの表示領域の一辺の長さである。すなわち、最小画像のサイズが縦H×横Wであるとしたとき、縦KH×横KWのサイズの表示領域を設定する。ただし表示領域の大きさを示す変数Kは、必ずしも計数された画像枚数Nの平方根以上の最小の整数である必要はなく、画像枚数Nの平方根以上の整数であればよい。その整数が値nである場合、n×nの大きさを有する表示領域を設定する。
【0057】
ステップS403において、計数された画像枚数Nと、設定された変数Kの値とに基づいて、単位画像に対して一辺の長さがそれぞれ同じ整数k倍(k=2、3、…、M)である一または複数サイズの拡大画像と単位画像とを表示領域に隙間無くレイアウトするために必要な、一または複数サイズの拡大画像のそれぞれの必要枚数を算出する。ここでは、例えば拡大画像のサイズが2×2(k=2)および3×3(k=3)の2種類である場合を考える。具体的には、D=K×K−3A−8B−Nとセットする。ここで、Dは詰め込み判定関数であり、Aは一辺の長さが最小画像の2倍の画像の枚数、Bは一辺の長さが最小画像の3倍の画像の枚数である。すなわち、上記整数の二乗から、単位画像に対して一辺の長さがそれぞれ2倍の拡大画像の枚数の3倍(22−1倍)の値と、単位画像に対して一辺の長さがそれぞれ3倍の拡大画像の枚数の8倍(32−1倍)の値と、計数された画像枚数とを減算する。値が零となる、2×2(k=2)の拡大画像および3×3(k=3)の拡大画像の組み合わせを算出する。表示領域の一辺の長さKに対して、詰め込み判定関数D=0となる自然数A、Bが存在し、かつ、図5(a)〜(e)のように詰め込んだときに大きい画像同士が重ならないならば(K、A、B)の組はレイアウト候補となる。なお、さらに他のサイズの拡大画像も存在する場合は、詰め込み判定関数Dは、D=K×K−Σ[k=2、3、・・・、M](k2−1)G(k)−Nとなる。上述した例では、G(2)がAに相当し、G(3)がBに相当する。この一般形については後述する。
【0058】
ステップS404において、表示領域の一辺の長さKに対して、詰め込み判定関数D=0となる自然数A、Bがあるかどうかを判定する。詰め込み判定関数D=0となる自然数A、Bがあると判定された場合(ステップS404;YES)、ステップS405に進む。一方、詰め込み判定関数D=0となる自然数A、Bがないと判定された場合(ステップS404;NO)、ステップS408に進む。
【0059】
ステップS405において、大きいサイズの画像(一辺の長さが最小画像の2倍の画像:A枚、3倍の画像:B枚)同士が重ならないかどうか判定する。大きいサイズの画像同士が重なると判定された場合(ステップS405;NO)、ステップS407に進む。一方、大きいサイズの画像同士が重ならないと判定された場合(ステップS405;YES)、ステップS406に進む。ステップS405において、重なり判定は次のように行う。まず、表示領域の左上から右下に向かうラスタースキャン方式で一辺の長さが最小画像の2倍の画像をA枚配置する。次に、表示領域の右下から左上に向かうラスタースキャン方式で一辺の長さが最小画像の3倍の画像をB枚配置する。このように配置したときに、これらの一辺の長さが最小画像の2倍の画像をA枚と、一辺の長さが最小画像の3倍の画像をB枚とが何れも重ならないときに、ステップS405においてYESと判定する。
【0060】
ステップS406において、(K、A、B)の組をレイアウト候補として記憶する。ステップS407において、より多くのレイアウト候補を得たいかどうか判定する。より多くのレイアウト候補を得たいと判定された場合(ステップS407;YES)、ステップS408に進む。一方、より多くのレイアウト候補を得る必要がないと判定された場合(ステップS407;NO)、処理を終了する。
【0061】
ステップS408において、表示画面の一辺の長さKをインクリメントして、ステップS403に戻る。なお、必ずしもインクリメントする必要はなく、所定の整数を加算してもよい。
【0062】
ここで、図5(a)〜(e)は、レイアウト画像枚数がN=27のときに、本アルゴリズムで得られたレイアウト候補(K、A、B)を示す。図5(a)は、レイアウト候補(K、A、B)=(6、3、0)の場合である。図5(b)は、レイアウト候補(K、A、B)=(7、2、2)の場合である。図5(c)は、レイアウト候補(K、A、B)=(8、7、2)の場合である。図5(d)は、レイアウト候補(K、A、B)=(9、10、3)の場合である。図5(e)は、レイアウト候補(K、A、B)=(9、2、6)の場合である。
【0063】
本アルゴリズムでは、大きいサイズの画像として一辺の長さが最小画像の2倍、3倍の画像を用いているが、画像の枚数が2、3、5枚のときは隙間無く詰め込むことができない。そこでN<6のときは例外処理として、図5(f1)〜(f5)に示すように、何枚かの画像を90度回転して詰め込んだり、図5(g2)、(g3)、(g5)のように同じ画像を2回使って詰め込む。
【0064】
以上がレイアウト候補の算出を行う処理Aの詳細である。
【0065】
<基本領域P(I)の設定:処理B>
次に、図6および図7を参照して、基本領域P(I)を設定する処理Bの流れを説明する。この処理で用いるレイアウト候補(K、A、B)は、処理A(図4)のアルゴリズムにおいてレイアウト画像枚数Nにメイン画像枚数MNをセットして算出する。
【0066】
ステップS601において、すべての基本領域番号Iに対して、基本領域P(I)の値を初期化する(P(I)←−1)。すなわち、P(I)を−1で初期化する。ステップS602において、メインレイアウト表示領域154をK×K個の基本領域P(I)に分割する(図7(a))。メインレイアウト表示領域154における各基本領域P(I)の大きさが、最小サイズの画像となる。次に、図7(c)に示すように、メインレイアウト表示領域154内の基本領域P(I)に値を設定する。
【0067】
まずステップS603において、メインレイアウト表示領域154の左上から右下に向かうラスタスキャン方式で、2×2の大きさの4倍領域をA個設定し、4倍領域に数値を0から順番にセットする。4倍領域内の4個の基本領域P(I)には4倍領域に設定した数値と同じ数値をセットする。本発明において、「表示領域の左上から右下に向かうラスタースキャン方式で領域を設定」とは、例えば図7(a)において、P(0)、P(1)、・・・、P(6)、P(7)、P(8)、・・・、のような順番で領域を設定することを言う。
【0068】
次にステップS604において、メインレイアウト表示領域154の右下から左上に向かうラスタスキャン方式で、3×3の大きさの9倍領域をB個設定し、9倍領域に数値を順番にセットする。本発明において、「表示領域の右下から左上に向かうラスタースキャン方式で領域を設定」とは、例えば図7(a)において、P(48)、P(47)、・・・、P(42)、P(41)、P(40)、・・・、のような順番で領域を設定することを言う。
【0069】
さらにステップS605において、残りのMN−A−B個の基本領域P(I)にも数値を順番にセットする。
【0070】
また、ステップS606において、サブレイアウト表示領域157に、SN枚の画像を配置するためにSN個以上の基本領域P(I)を設定する(図7(b))。ステップS607において、図7(d)に示すように、サブレイアウト表示領域157のSN個の基本領域P(I)にも順番に数値をセットする。
【0071】
図7(c)、(d)で示すように、P(0)=0、P(1)=0、P(2)=1、P(3)=1、P(4)=4、P(5)=5、P(6)=6、P(7)=0、P(8)=0、P(9)=1、P(10)=1、P(11)=7、・・・のように基本領域の値がセットされる。
【0072】
以上が基本領域P(I)を設定する処理Bの詳細である。
【0073】
<画像の描画:処理C>
図8を参照して、設定された基本領域P(I)に画像を描画する処理Cの流れを説明する。まず、メインレイアウト表示領域154内の基本領域P(I)の値に応じて画像を描画する(図8(a)〜(b))。ここでは最初に、隣接する3×3の9つの基本領域P(I)が同じ値Jである9倍領域に対しては、一辺の長さが最小画像の3倍の画像Img[J]を描画する。次に、隣接する2×2の4つの基本領域P(I)が同じ値Jである4倍領域に対しては、一辺の長さが最小画像の2倍の画像Img[J]を描画する。最後に、残りの基本領域P(I)=Jに対して、最小画像サイズの画像Img[J]を描画する。
【0074】
さらに、サブレイアウト表示領域157内の基本領域P(I)の値に応じて画像を描画する(図8(c)〜(d))。ここでは基本領域P(I)=Jに対して、画像Img[J]を描画する。このようにして、一または複数サイズの拡大画像のそれぞれの必要枚数に基づいて、拡大画像と単位画像とを表示領域にレイアウトすることができる。
【0075】
以上が、設定された基本領域P(I)に画像を描画する処理Cの詳細である。
【0076】
<画像の選択:処理D>
図9および図10を参照して、画像を選択する処理Dの流れを説明する。まず、ステップS901において、マウスDownした位置(X、Y)を検出する。
【0077】
ステップS902において、マウスDownした位置(X、Y)がメインレイアウト表示領域154内の領域P(I)内にあるか否かが判断される。位置(X、Y)がメインレイアウト表示領域154内の領域P(I)内にあると判断された場合(ステップS902;YES)、ステップS903に進む。一方、位置(X、Y)がメインレイアウト表示領域154内の領域P(I)内にないと判断された場合(ステップS902;NO)、ステップS905に進む。
【0078】
ステップS903において、開始領域番号SIに基本領域番号Iをセットする。ステップS904において、位置(X、Y)にある画像の大きさと範囲を取得する。その後、処理が終了する。
【0079】
また、ステップS905において、マウスDownした位置(X、Y)がサブレイアウト表示領域157内の領域P(I)内にあるか否かが判断される。位置(X、Y)がサブレイアウト表示領域157内の領域P(I)内にあると判断された場合(ステップS905;YES)、ステップS906に進む。一方、位置(X、Y)がサブレイアウト表示領域157内の領域P(I)内にないと判断された場合(ステップS905;NO)、処理が終了する。ステップS906において、開始領域番号SIに基本領域番号Iをセットする。その後、処理が終了する。
【0080】
図10(a)のようなメインレイアウト表示領域154内の矢印の位置でマウスDownが検出されると、開始領域番号SIに矢印が示す番号である32がセットされる。同様に、図10(b)のようなサブレイアウト表示領域157内の矢印の位置でマウスDownが検出されると、開始領域番号SIに矢印が示す番号である52がセットされる。
【0081】
以上が画像を選択する処理Dの詳細である。
【0082】
<画像を「削除/戻す」:処理E>
図11、図12、および図13を参照して、画像を「削除/戻す」処理Eの流れを説明する。
【0083】
ステップS1101において、マウスUpの位置(X、Y)を検出する。ステップS1102において、マウスUpの位置が「削除/戻す」領域156内にあるかどうかを判定する。マウスUpの位置が「削除/戻す」領域156内にあると判定された場合(ステップS1102;YES)、ステップS1103に進む。。一方、マウスUpの位置が「削除/戻す」領域156内にないと判定された場合(ステップS1102;NO)、処理を終了する。
【0084】
ステップS1103において、処理Dで求められた開始領域番号SIに対応する基本領域P(SI)がメインレイアウト表示領域154内にあるかどうか判定する。基本領域P(SI)がメインレイアウト表示領域154内にあると判定された場合(ステップS1103;YES)、ステップS1104に進む。一方、基本領域P(SI)がメインレイアウト表示領域154内にないと判定された場合(ステップS1103;NO)、ステップS1107に進む。
【0085】
ステップS1104において、画像Img[P(SI)]をメインレイアウト表示領域154から削除して、それをサブレイアウト表示領域157の最後の画像Img[MN+SN−1]とする。
【0086】
ステップS1105において、メイン画像枚数MNをディクリメントし、サブ画像枚数SNをインクリメントする。ステップS1106において、レイアウト画像枚数Nにメイン画像枚数MNをセットする。その後、処理を終了する。
【0087】
また、ステップS1107において、処理Dで求められた開始領域番号SIに対応する基本領域P(SI)がサブレイアウト表示領域157内にあるかどうか判定する。基本領域P(SI)がサブレイアウト表示領域157内にあると判定された場合(ステップS1107;YES)、ステップS1108に進む。一方、基本領域P(SI)がサブレイアウト表示領域157内にないと判定された場合(ステップS1107;NO)、処理を終了する。
【0088】
ステップS1108において、画像Img[P(SI)]をサブレイアウト表示領域157から削除して、それをメインレイアウト表示領域154の最初の画像Img[0]とする。
【0089】
ステップS1109において、メイン画像枚数MNをインクリメントし、サブ画像枚数SNをディクリメントする。ステップS1110において、レイアウト画像枚数Nにメイン画像枚数MNをセットする。その後、処理を終了する。
【0090】
図12は画像を「削除」する処理が行われる様子を示す図である。図の矢印で示すように、マウスでメインレイアウト表示領域154内の画像Img[2]を選択して「削除/戻す」領域156にDragする。すると図12(a)の画像Img[2]がメインレイアウト表示領域154から削除されて、図12(b)のサブレイアウト表示領域157の画像Img[38]となる。このとき、メイン画像枚数表示領域155のメイン画像枚数MNは、27から26にディクリメントされ、サブ画像枚数表示領域158のサブ画像枚数SNは、12から13にインクリメントされる。
【0091】
一方、図13は画像を「戻す」処理が行われる様子を示す図である。図の矢印で示すように、マウスでサブレイアウト表示領域157内の画像Img[28]を選択して「削除/戻す」領域156にDragする。すると図13(a)の画像Img[28]がサブレイアウト表示領域157から削除されて、図13(b)のメインレイアウト表示領域154の画像Img[0]となる。このとき、メイン画像枚数表示領域155のメイン画像枚数MNは、19から20にインクリメントされ、サブ画像枚数表示領域158のサブ画像枚数SNは、20から19にディクリメントされる。
【0092】
以上が画像を「削除/戻す」処理Eの詳細である。
【0093】
<画像のシフト:処理F〜G>
図14、図15、図16、及び図17を参照して、画像のシフトを説明する。
【0094】
まず、図14および図15を参照して、指定された画像のシフト可能な位置の算出を行う処理Fの流れを説明する。ユーザにより指定された一または複数サイズの拡大画像または単位画像のうちの1つを縦横方向にシフトした場合に、シフト先に存在する他の拡大画像または単位画像の全てを包含する位置を、シフト可能な表示領域における位置として算出する。
【0095】
ステップS1401において、マウスDownの位置(X、Y)を検出し、位置(X、Y)の基本領域番号Iを求め、画像Img[P(I)]の矩形を求める(図15(a)、(b))。
【0096】
ステップS1402において、画像と画像との境界からなる矩形で、選択した矩形を含み、他の矩形と交わらず、選択した矩形と幅が同じ矩形を探す(図15(c))。
【0097】
ステップS1403において、画像と画像との境界からなる矩形で、選択した矩形を含み、他の矩形と交わらず、選択した矩形と高さが同じ矩形を探す(図15(d))。
【0098】
ステップS1404において、ステップS1402およびステップS1403で得られた矩形の辺のうち、選択した矩形に含まれない辺をシフト可能位置とする(図15(e))。
【0099】
すなわち、図15(a)の位置でマウスDownすると、画像Img[3]がシフト可能位置として、図15(f)のL1、R1、U1、U2が得られる(シフト可能位置算出)。
【0100】
以上が画像のシフト可能な位置の算出を行う処理Fの詳細である。
【0101】
次に、図16および図17を参照して、選択された画像Img[P(I)]をDragしてシフトを実行する処理Gの流れを説明する。
【0102】
ステップS1601において、図17(a)の矢印で示すように画像をマウスDragする。画像をマウスDragしたと判断された場合(ステップS1601;YES)、ステップS1602に進む。一方、画像をマウスDragしていないと判断された場合(ステップS1601;NO)、処理を終了する。
【0103】
ステップS1602において、Drag中のマウス位置(X、Y)がシフト可能位置であるL1、R1、U1、U2のいずれかの一定範囲内に近づいたかどうかを判定する。Drag中のマウス位置(X、Y)がシフト可能位置のいずれかの一定範囲内に近づいたと判定された場合(ステップS1602;YES)、ステップS1603に進む。一方、Drag中のマウス位置(X、Y)がシフト可能位置のいずれかの一定範囲内に近づいていないと判定された場合(ステップS1602;NO)、ステップS1604に進む。
【0104】
ステップS1603において、矢印で示すマウス位置(X、Y)の一定範囲内で最も近くにあるシフト可能位置を太い線で識別表示する(図17(b))。
【0105】
ステップS1604において、マウスUpの有無を判定する。マウスUpされたと判定された場合(ステップS1604;YES)、ステップS1605に進む。一方、マウスUpされていないと判定された場合(ステップS1604;NO)、ステップS1601に戻る。
【0106】
ステップS1605において、マウスUpの位置を算出する(シフト可能位置選択処理)。ここでは図17(c)の位置でマウスUpしたと仮定する。
【0107】
ステップS1606において、マウスDownの位置とマウスUpの位置に応じて基本領域P(I)の値を入れ替える。ここでは最初にマウスDownした位置にあった画像Img[3]に対応する9つの基本領域P(I)の値[3]を2つ上にシフトし、6つの基本領域P(I)の値[11]、[12]、[13]、[18]、[19]、[20]を3つ下にシフトする。その結果、基本領域P(I)の値は図17(d)のように入れ替えられる。図3で説明したように、処理Gの後に画像を描画する処理Cが実行されるので、処理Cによって基本領域P(I)の値に基づいて画像が描画される(図17(e))。その後、処理を終了する。
【0108】
以上が選択された画像Img[P(I)]をDragしてシフトを実行する処理Gの詳細である。
【0109】
<画像の交換:処理H>
図3で説明したように、画像を選択する処理D(画像指定処理)の後に、画像を交換する処理H(画像交換処理)が行われる。図18および図19を参照して、画像を交換する処理Hの流れを説明する。ここでは、例えば図19(a)の矢印で示すように画像Img[8]をマウスで画像Img[3]の位置にDragする。
【0110】
ステップS1801において、基本領域P(SI)にあった画像Img[P(SI)]をマウスでDrag中(図19(b))であるかどうか判定する。Drag中であると判定された場合(ステップS1801;YES)、ステップS1802に進む。一方、Drag中でないと判定された場合(ステップS1801;NO)、処理を終了する。
【0111】
ステップS1802において、マウスUpしたかどうか判定する。マウスUpしたと判定された場合(ステップS1802;YES)、ステップS1803に進む。一方、マウスUpしていないと判定された場合(ステップS1802;NO)、ステップS1801に戻る。
【0112】
ステップS1803において、マウスUpの位置(X、Y)を算出する。ステップS1804において、位置(X、Y)がメインレイアウト表示領域154内のいずれかの基本領域P(I)内にあるかどうかを判定する。位置(X、Y)が基本領域P(I)内にあると判定された場合(ステップS1804;YES)、ステップS1805に進む。一方、位置(X、Y)が基本領域P(I)内にないと判定された場合(ステップS1804;NO)、処理を終了する。
【0113】
ステップS1805において、終了領域番号EIに基本領域番号Iをセットする。ステップS1806において、画像Img[P(SI)]と画像Img[P(EI)]とを交換する。ここでは図19(c)のように、画像Img[8]と画像Img[3]とが交換される。以上が画像を交換する処理Hの詳細である。
【0114】
第1実施形態では、画像枚数が与えられたら、1画面に複数の画像を隙間無く詰め込むための、画面の一辺の長さと、最小画像の枚数と、辺の長さとが最小画像の整数倍(2倍、3倍)の画像の枚数とを算出する。これによって、任意枚数の画像を1画面に隙間無く詰め込むことができるので、省スペースで画面または用紙に無駄が無く、かつ、枠が揃って美しいレイアウトを生成することが可能になる。
【0115】
また、第1実施形態では、選択中のレイアウト候補から選択した画像を削除したり戻したりすることができ、削除や戻す操作で画像枚数が変われば、再び画像を1画面に隙間無く詰め込んでレイアウトする。これによって、失敗画像や失敗写真の削除および削除のやり直しが可能となる。
【0116】
また、第1実施形態では、選択された画像を含み、他の矩形と交わらず、選択された画像と幅が同じで、画像と画像との境界からなる矩形をすべて求め、求めた矩形の上辺と下辺を求める。また、選択された画像を含み、他の矩形と交わらず、選択された画像と高さが同じで、画像と画像との境界からなる矩形をすべて求め、求めた矩形の左辺と右辺を求める。そして、選択された画像のシフト可能な位置をこのように求めた上辺、下辺、左辺、右辺とし、ユーザにわかりやすく表示する。これによって、ユーザは簡単な操作でシフト可能な位置に画像をシフトして、所望のレイアウトを生成することが可能になる。
【0117】
また、第1実施形態では、選択された画像を移動すると、移動先の位置にある画像と選択された画像とを交換する。これによって、所望の位置に所望の画像をレイアウトすることが可能になる。
【0118】
(第2実施形態)
<レイアウト候補の算出を行う他の例:処理A2>
図20および図21を参照して、レイアウト候補の算出を行う他の例である処理A2の流れを説明する。このアルゴリズムでは、表示領域と縦横比が同じN枚の画像を表示領域に隙間無く詰め込むときに、最小画像に対して一辺が整数倍(ここでは2倍、3倍、・・・、M倍)の画像をそれぞれ何枚用いればよいかを算出する。ここで、メインレイアウト表示領域154における各基本領域P(I)の大きさが、最小画像のサイズである。
【0119】
ステップS2001において、レイアウト画像枚数Nをセットする。
【0120】
ステップS2002において、√N以上の最小の自然数を求めて変数Kにセットする。ここでKは、最小画像の一辺の長さを1としたときの表示領域の一辺の長さである。
【0121】
ステップS2003において、詰め込み判定関数D=K×K−Σ[L=2、・・・M](L×L−1)G(L)−Nとセットする。ここで、Σは総和であり、Mは使用される可能性のある最大画像の一辺の長さであり、G(L)は一辺の長さが最小画像のL倍の画像の枚数である。表示領域の一辺の長さKに対して、詰め込み判定関数D=0となる自然数G(L:L=2、・・・M)の組が存在し、かつ、図21(a)〜(j)のように詰め込んだときにL×L(L=2、3、・・・、M)サイズの大きい画像同士が重ならないならば(K、G(L:L=2、・・・M))の組はレイアウト候補となる。
【0122】
ステップS2004において、表示領域の一辺の長さKに対して、詰め込み判定関数D=0となる自然数G(L:L=2、・・・M)の組があるかどうかを判定する。詰め込み判定関数D=0となる自然数G(L:L=2、・・・M)の組があると判定された場合(ステップS2004;YES)、ステップS2005に進む。一方、詰め込み判定関数D=0となる自然数G(L:L=2、・・・M)の組がないと判定された場合(ステップS2004;NO)、ステップS2008に進む。
【0123】
ステップS2005において、大きいサイズの画像同士が所定のレイアウトで重ならずに表示領域に配置できるかどうか判定する。大きいサイズの画像同士が所定のレイアウトで重ならずに配置できると判定された場合(ステップS2005;YES)、ステップS2006に進む。一方、大きいサイズの画像同士が重なると判定された場合(ステップS2005;NO)、ステップS2007に進む。ここで、ステップS2005における重なり判定は、次の処理(S1)〜(S3)ようにして行う。(S1):L(≧2)が偶数のとき、空いている表示領域を左上から右下に向かうラスタスキャン方式でスキャンしてL×Lの大きさの領域を設定可能な領域を探索し、探索した領域に左上から右下に向かうラスタスキャン方式でL×Lの大きさの領域をG(L)個設定する。(S2):L(≧3)が奇数のとき、空いている表示領域を右下から左上に向かうラスタスキャン方式でスキャンしてL×Lの大きさの領域を設定可能な領域を探索し、探索した領域に右下から左上に向かうラスタスキャン方式でL×Lの大きさの領域をG(L)個設定する。(S3):変数L=2、3、・・・、Mに対して、上記(S1)と(S2)の処理を繰り返し行い、全てのL×L(L=2、3、・・・、M)の大きさの領域が重ならなければ、ステップS2005でYESと判定する。
【0124】
ステップS2006において、(K、G(L:L=2、・・・M))の組をレイアウト候補として記憶する。
【0125】
ステップS2007において、もっと多くのレイアウト候補を得たいかどうか判定する。もっと多くのレイアウト候補を得たいと判定された場合(ステップS2007;YES)、ステップS2008に進む。一方、もっと多くのレイアウト候補を得る必要がないと判定された場合(ステップS2007;NO)、処理を終了する。
【0126】
また、ステップS2008において、表示画面の一辺の長さKをインクリメントして、ステップS2003に戻る。
【0127】
図21(a)〜(j)は、レイアウト画像枚数がN=28のとき、本アルゴリズムで得られたレイアウト候補(K、G(2)、G(3)、G(4)、G(5))=(K、A、B、C、D)のいくつかの例を示す。図21(a)は、(K、A、B、C、D)=(6、0、1、0、0)の場合である。図21(b)は、(K、A、B、C、D)=(7、7、0、0、0)の場合である。図21(c)は、(K、A、B、C、D)=(7、2、0、1、0)の場合である。図21(d)は、(K、A、B、C、D)=(8、12、0、0、0)の場合である。図21(e)は、(K、A、B、C、D)=(8、7、0、1、0)の場合である。図21(f)は、(K、A、B、C、D)=(8、4、3、0、0)の場合である。図21(g)は、(K、A、B、C、D)=(8、4、0、0、1)の場合である。図21(h)は、(K、A、B、C、D)=(9、15、1、0、0)の場合である。図21(i)は、(K、A、B、C、D)=(9、7、4、0、0)の場合である。図21(j)は、(K、A、B、C、D)=(9、7、1、0、1)の場合である。第2実施形態では、画像枚数が与えられたら、1画面に複数の画像を隙間無く詰め込むための、画面の一辺の長さと、最小画像の枚数と、辺の長さが最小画像の整数倍(2倍、3倍、4倍、5倍)の画像の枚数とを算出する。これによって、選択した画像を特に大きいサイズで、すなわち辺の長さを最小画像の4倍、5倍としても表示できる。
【0128】
(第3実施形態)
<小画面への適用例>
図22を参照して、本発明を画面の小さいデジタルカメラに適用した例について説明する。本デジタルカメラは本体2200上に、タッチパネルを表面に配置した入力画面2201と操作ボタン類2202とが配備されている。
【0129】
まず、図22(a)のように操作ボタン類2202を操作して、日付ごとに作成された写真フォルダを選択する。
【0130】
写真フォルダを選択すると図22(b)のように、選択されたフォルダ内の写真が読み込まれ、入力画面に隙間無く詰め込まれてレイアウトされ表示される。ここで、ユーザが指で画面の画像IAの位置をタッチする。
【0131】
指の大きさは画面上の最小画像サイズより大きいので、指でタッチした位置の中心を算出し、タッチ位置中心にある画像IAと操作メニュー(「削除」、「シフト」、「交換」)を拡大表示する(図22(c))。ここで、ユーザが「削除」メニューをタッチする。
【0132】
すると、画像IAが削除され、新たな枚数でレイアウト候補が算出されて、図22(d)のようになる。次に、ユーザが指で画面に画像IBの位置をタッチする(図22(d))。
【0133】
すると、指でタッチした位置の中心を算出し、タッチ位置中心にある画像IBと操作メニュー(「削除」、「シフト」、「交換」)を拡大表示する(図22(e))。ここで、ユーザが「シフト」メニューをタッチする。
【0134】
すると、図22(f)のように、画像IBをシフト可能な位置が表示される。ここで、図22(f)の矢印で示す位置をユーザが指でなぞって画像をドラッグする。すると、図22(g)に示すように画像IBがシフトする。次に、ユーザが指で画面に画像ICの位置をタッチする(図22(g))。すると、指でタッチした位置の中心を算出し、タッチ位置中心にある画像ICと操作メニュー(「削除」、「シフト」、「交換」)を拡大表示する(図22(h))。ここで、ユーザが「交換」メニューをタッチする。すると、図22(i)で示すように、画像ICが指で操作可能な大きさに拡大表示される。図22(i)の矢印で示すようにユーザが指でなぞって画像ICを画像IBの位置にドラッグする。すると、図22(j)に示すように画像ICと画像IBとが交換される。
【0135】
第3実施形態では、画像を選択すると、選択された画像および画像の操作メニューを拡大表示する。選択された画像を指でなぞってドラッグしたり、操作メニューを指でタッチしたりすることで、本発明を小画面の機器に適用することが可能になる。
【0136】
(第4実施形態)
また、小さいタッチパネル画面のデジタルカメラやプリンタのような機器に本発明を適用してレイアウト編集を行う場合には、大きい画像は表示するが、小さい画像は表示せずレイアウト枠のみ表示するようにしてもよい。また、大きいサイズの画像のみシフトや交換ができるようにしてもよい。このとき、大きいサイズの画像の領域のみタッチ操作を受け付けて、小さいサイズの画像の領域はタッチ操作を受け付けないようにしてもよい。
【0137】
第4実施形態では、小さいサイズの画像は表示せずレイアウト枠のみ表示し、大きいサイズの画像のみシフトや交換ができるようにすることで、小さい画面のタッチパネルによる誤操作を防止できる。
【0138】
(その他の実施形態)
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
【特許請求の範囲】
【請求項1】
画像レイアウトを行う情報処理装置であって、
同一の縦横比を有する複数枚の画像の画像枚数を計数する計数手段と、
前記計数手段により計数された前記画像枚数の平方根以上の整数の値をnとして、前記縦横比を有する表示領域に隙間無くレイアウトする際に最小サイズとなり且つ前記縦横比を有する単位画像に対する前記表示領域の一辺のそれぞれの長さとしてn×nの大きさを有する表示領域を設定する設定手段と、
前記計数手段により計数された画像枚数と、前記設定手段により設定された整数の値nとに基づいて、前記単位画像に対して一辺の長さがそれぞれ同じ整数倍である一または複数サイズの拡大画像と前記単位画像とを前記表示領域に隙間無くレイアウトするために必要な、前記一または複数サイズの拡大画像のそれぞれの必要枚数を算出する算出手段と、
前記算出手段により算出された前記一または複数サイズの拡大画像のそれぞれの必要枚数に基づいて、前記一または複数サイズの前記拡大画像と、前記単位画像とを前記表示領域にレイアウトするレイアウト手段と、
を備えることを特徴とする情報処理装置。
【請求項2】
前記計数手段により計数された前記画像枚数の平方根以上の整数の値nに所定の整数を加算する加算手段をさらに備え、
前記設定手段は、前記加算手段により加算された新たな整数の値を、前記単位画像に対する前記表示領域の一辺のそれぞれの長さとして前記表示領域の大きさを再び設定することを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記設定手段は、前記計数手段により計数された前記画像枚数の平方根以上の最小の整数の値を、前記単位画像に対する前記表示領域の一辺のそれぞれの長さとして前記表示領域の大きさを設定することを特徴とする請求項1または2に記載の情報処理装置。
【請求項4】
前記算出手段は、
前記設定手段により設定された前記整数の値nの二乗から、
前記単位画像に対して一辺の長さがそれぞれk(k=2、3、…、M≦前記設定手段により設定された整数の値)倍である拡大画像の枚数のk2−1倍の値に対する、k=2からk=Mまでの各kについての当該値の総和と、
前記計数手段により計数された前記画像枚数と、
を減算した値が零となる、前記単位画像に対して一辺の長さがそれぞれk倍である拡大画像の枚数の組み合わせを算出することにより、前記一または複数サイズの拡大画像のそれぞれの必要枚数を算出することを特徴とする請求項1乃至3の何れか1項に記載の情報処理装置。
【請求項5】
前記拡大画像のサイズが、前記単位画像に対して一辺の長さがそれぞれ同じ2倍である場合、および、前記単位画像に対して一辺の長さがそれぞれ同じ3倍である場合、
前記算出手段は、前記設定手段により設定された前記整数の二乗から、前記単位画像に対して一辺の長さがそれぞれ2倍である拡大画像の枚数の3倍の値と、前記単位画像に対して一辺の長さがそれぞれ3倍である拡大画像の枚数の8倍の値と、前記計数手段により計数された前記画像枚数と、を減算した値が零となる、前記単位画像に対して一辺の長さがそれぞれ2倍である拡大画像の枚数と、前記単位画像に対して一辺の長さがそれぞれ3倍である拡大画像の枚数と、の組み合わせを算出することにより、前記一または複数サイズの拡大画像のそれぞれの必要枚数を算出することを特徴とする請求項4に記載の情報処理装置。
【請求項6】
前記レイアウト手段は、
前記算出手段により算出された前記必要枚数の一または複数サイズの前記拡大画像と、前記単位画像と、を前記表示領域にレイアウトする際に、前記拡大画像同士が重ならない配置をレイアウト候補として生成する生成手段と、
前記レイアウト候補のうち、1つのレイアウト候補を選択する選択手段と、を備え、
前記選択手段により選択されたレイアウト候補により、前記一または複数サイズの前記拡大画像と、前記単位画像とを前記表示領域にレイアウトすることを特徴とする請求項1乃至5の何れか1項に記載の情報処理装置。
【請求項7】
前記レイアウト手段によりレイアウトされた前記一または複数サイズの前記拡大画像または前記単位画像を前記表示領域から削除する削除手段と、
前記削除手段により削除された前記一または複数サイズの前記拡大画像または前記単位画像を前記表示領域に再び追加する追加手段と、をさらに備え、
前記計数手段は、前記削除手段または前記追加手段により削除または追加された場合、前記画像枚数を改めて計数することを特徴とする請求項6に記載の情報処理装置。
【請求項8】
前記レイアウト手段によりレイアウトされた前記一または複数サイズの前記拡大画像または前記単位画像のうち1つをユーザに指定させる指定手段と、
前記指定手段により指定された前記一または複数サイズの前記拡大画像または前記単位画像のうちの1つを縦横方向にシフトした場合に、シフト先に存在する他の拡大画像または単位画像の全てを包含する位置を、シフト可能な前記表示領域における位置として算出するシフト可能位置算出手段と、
前記シフト可能位置算出手段により算出されたシフト可能な前記表示領域における位置のうち1つをユーザに選択させるシフト可能位置選択手段と、
前記シフト可能位置選択手段により選択されたシフト可能な前記表示領域における位置に前記一または複数サイズの前記拡大画像または前記単位画像をシフトするシフト手段と、
をさらに備えることを特徴とする請求項6に記載の情報処理装置。
【請求項9】
前記レイアウト手段によりレイアウトされた前記一または複数サイズの前記拡大画像または前記単位画像のうち1つをユーザに指定させる画像指定手段と、
前記画像指定手段により指定された前記一または複数サイズの前記拡大画像または前記単位画像と、前記表示領域における他の拡大画像または単位画像と、の前記表示領域における位置およびサイズを交換する交換手段と、
をさらに備えることを特徴とする請求項6に記載の情報処理装置。
【請求項10】
画像のレイアウトを行う情報処理方法であって、
計数手段が、同一の縦横比を有する複数枚の画像の画像枚数を計数する計数工程と、
設定手段が、前記計数工程により計数された前記画像枚数の平方根以上の整数の値をnとして、前記縦横比を有する表示領域に隙間無くレイアウトする際に最小サイズとなり且つ前記縦横比を有する単位画像に対する前記表示領域の一辺のそれぞれの長さとしてn×nの大きさを有する表示領域を設定する設定工程と、
算出手段が、前記計数工程により計数された画像枚数と、前記設定工程により設定された整数の値nとに基づいて、前記単位画像に対して一辺の長さがそれぞれ同じ整数倍である一または複数サイズの拡大画像と前記単位画像とを前記表示領域に隙間無くレイアウトするために必要な、前記一または複数サイズの拡大画像のそれぞれの必要枚数を算出する算出工程と、
レイアウト手段が、前記算出工程により算出された前記一または複数サイズの拡大画像のそれぞれの必要枚数に基づいて、前記一または複数サイズの前記拡大画像と、前記単位画像とを前記表示領域にレイアウトするレイアウト工程と、
を有することを特徴とする情報処理方法。
【請求項11】
請求項10に記載の情報処理方法をコンピュータに実行させるためのプログラム。
【請求項1】
画像レイアウトを行う情報処理装置であって、
同一の縦横比を有する複数枚の画像の画像枚数を計数する計数手段と、
前記計数手段により計数された前記画像枚数の平方根以上の整数の値をnとして、前記縦横比を有する表示領域に隙間無くレイアウトする際に最小サイズとなり且つ前記縦横比を有する単位画像に対する前記表示領域の一辺のそれぞれの長さとしてn×nの大きさを有する表示領域を設定する設定手段と、
前記計数手段により計数された画像枚数と、前記設定手段により設定された整数の値nとに基づいて、前記単位画像に対して一辺の長さがそれぞれ同じ整数倍である一または複数サイズの拡大画像と前記単位画像とを前記表示領域に隙間無くレイアウトするために必要な、前記一または複数サイズの拡大画像のそれぞれの必要枚数を算出する算出手段と、
前記算出手段により算出された前記一または複数サイズの拡大画像のそれぞれの必要枚数に基づいて、前記一または複数サイズの前記拡大画像と、前記単位画像とを前記表示領域にレイアウトするレイアウト手段と、
を備えることを特徴とする情報処理装置。
【請求項2】
前記計数手段により計数された前記画像枚数の平方根以上の整数の値nに所定の整数を加算する加算手段をさらに備え、
前記設定手段は、前記加算手段により加算された新たな整数の値を、前記単位画像に対する前記表示領域の一辺のそれぞれの長さとして前記表示領域の大きさを再び設定することを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記設定手段は、前記計数手段により計数された前記画像枚数の平方根以上の最小の整数の値を、前記単位画像に対する前記表示領域の一辺のそれぞれの長さとして前記表示領域の大きさを設定することを特徴とする請求項1または2に記載の情報処理装置。
【請求項4】
前記算出手段は、
前記設定手段により設定された前記整数の値nの二乗から、
前記単位画像に対して一辺の長さがそれぞれk(k=2、3、…、M≦前記設定手段により設定された整数の値)倍である拡大画像の枚数のk2−1倍の値に対する、k=2からk=Mまでの各kについての当該値の総和と、
前記計数手段により計数された前記画像枚数と、
を減算した値が零となる、前記単位画像に対して一辺の長さがそれぞれk倍である拡大画像の枚数の組み合わせを算出することにより、前記一または複数サイズの拡大画像のそれぞれの必要枚数を算出することを特徴とする請求項1乃至3の何れか1項に記載の情報処理装置。
【請求項5】
前記拡大画像のサイズが、前記単位画像に対して一辺の長さがそれぞれ同じ2倍である場合、および、前記単位画像に対して一辺の長さがそれぞれ同じ3倍である場合、
前記算出手段は、前記設定手段により設定された前記整数の二乗から、前記単位画像に対して一辺の長さがそれぞれ2倍である拡大画像の枚数の3倍の値と、前記単位画像に対して一辺の長さがそれぞれ3倍である拡大画像の枚数の8倍の値と、前記計数手段により計数された前記画像枚数と、を減算した値が零となる、前記単位画像に対して一辺の長さがそれぞれ2倍である拡大画像の枚数と、前記単位画像に対して一辺の長さがそれぞれ3倍である拡大画像の枚数と、の組み合わせを算出することにより、前記一または複数サイズの拡大画像のそれぞれの必要枚数を算出することを特徴とする請求項4に記載の情報処理装置。
【請求項6】
前記レイアウト手段は、
前記算出手段により算出された前記必要枚数の一または複数サイズの前記拡大画像と、前記単位画像と、を前記表示領域にレイアウトする際に、前記拡大画像同士が重ならない配置をレイアウト候補として生成する生成手段と、
前記レイアウト候補のうち、1つのレイアウト候補を選択する選択手段と、を備え、
前記選択手段により選択されたレイアウト候補により、前記一または複数サイズの前記拡大画像と、前記単位画像とを前記表示領域にレイアウトすることを特徴とする請求項1乃至5の何れか1項に記載の情報処理装置。
【請求項7】
前記レイアウト手段によりレイアウトされた前記一または複数サイズの前記拡大画像または前記単位画像を前記表示領域から削除する削除手段と、
前記削除手段により削除された前記一または複数サイズの前記拡大画像または前記単位画像を前記表示領域に再び追加する追加手段と、をさらに備え、
前記計数手段は、前記削除手段または前記追加手段により削除または追加された場合、前記画像枚数を改めて計数することを特徴とする請求項6に記載の情報処理装置。
【請求項8】
前記レイアウト手段によりレイアウトされた前記一または複数サイズの前記拡大画像または前記単位画像のうち1つをユーザに指定させる指定手段と、
前記指定手段により指定された前記一または複数サイズの前記拡大画像または前記単位画像のうちの1つを縦横方向にシフトした場合に、シフト先に存在する他の拡大画像または単位画像の全てを包含する位置を、シフト可能な前記表示領域における位置として算出するシフト可能位置算出手段と、
前記シフト可能位置算出手段により算出されたシフト可能な前記表示領域における位置のうち1つをユーザに選択させるシフト可能位置選択手段と、
前記シフト可能位置選択手段により選択されたシフト可能な前記表示領域における位置に前記一または複数サイズの前記拡大画像または前記単位画像をシフトするシフト手段と、
をさらに備えることを特徴とする請求項6に記載の情報処理装置。
【請求項9】
前記レイアウト手段によりレイアウトされた前記一または複数サイズの前記拡大画像または前記単位画像のうち1つをユーザに指定させる画像指定手段と、
前記画像指定手段により指定された前記一または複数サイズの前記拡大画像または前記単位画像と、前記表示領域における他の拡大画像または単位画像と、の前記表示領域における位置およびサイズを交換する交換手段と、
をさらに備えることを特徴とする請求項6に記載の情報処理装置。
【請求項10】
画像のレイアウトを行う情報処理方法であって、
計数手段が、同一の縦横比を有する複数枚の画像の画像枚数を計数する計数工程と、
設定手段が、前記計数工程により計数された前記画像枚数の平方根以上の整数の値をnとして、前記縦横比を有する表示領域に隙間無くレイアウトする際に最小サイズとなり且つ前記縦横比を有する単位画像に対する前記表示領域の一辺のそれぞれの長さとしてn×nの大きさを有する表示領域を設定する設定工程と、
算出手段が、前記計数工程により計数された画像枚数と、前記設定工程により設定された整数の値nとに基づいて、前記単位画像に対して一辺の長さがそれぞれ同じ整数倍である一または複数サイズの拡大画像と前記単位画像とを前記表示領域に隙間無くレイアウトするために必要な、前記一または複数サイズの拡大画像のそれぞれの必要枚数を算出する算出工程と、
レイアウト手段が、前記算出工程により算出された前記一または複数サイズの拡大画像のそれぞれの必要枚数に基づいて、前記一または複数サイズの前記拡大画像と、前記単位画像とを前記表示領域にレイアウトするレイアウト工程と、
を有することを特徴とする情報処理方法。
【請求項11】
請求項10に記載の情報処理方法をコンピュータに実行させるためのプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【公開番号】特開2012−3433(P2012−3433A)
【公開日】平成24年1月5日(2012.1.5)
【国際特許分類】
【出願番号】特願2010−136649(P2010−136649)
【出願日】平成22年6月15日(2010.6.15)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
【公開日】平成24年1月5日(2012.1.5)
【国際特許分類】
【出願日】平成22年6月15日(2010.6.15)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
[ Back to top ]