(57)【特許請求の範囲】
【請求項１】
画像レイアウトを行う情報処理装置であって、
同一の縦横比を有する複数枚の画像の画像枚数を計数する計数手段と、
前記計数手段により計数された前記画像枚数の平方根以上の整数の値をｎとして、前記縦横比を有する表示領域に隙間無くレイアウトする際に最小サイズとなり且つ前記縦横比を有する単位画像に対する前記表示領域の一辺のそれぞれの長さとしてｎ×ｎの大きさを有する表示領域を設定する設定手段と、
前記計数手段により計数された画像枚数と、前記設定手段により設定された整数の値ｎとに基づいて、前記単位画像に対して一辺の長さがそれぞれ同じ整数倍である一または複数サイズの拡大画像と前記単位画像とを前記表示領域に隙間無くレイアウトするために必要な、前記一または複数サイズの拡大画像のそれぞれの必要枚数を算出する算出手段と、
前記算出手段により算出された前記一または複数サイズの拡大画像のそれぞれの必要枚数に基づいて、前記一または複数サイズの前記拡大画像と、前記単位画像とを前記表示領域にレイアウトするレイアウト手段と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記計数手段により計数された前記画像枚数の平方根以上の整数の値ｎに所定の整数を加算する加算手段をさらに備え、
前記設定手段は、前記加算手段により加算された新たな整数の値を、前記単位画像に対する前記表示領域の一辺のそれぞれの長さとして前記表示領域の大きさを再び設定することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記設定手段は、前記計数手段により計数された前記画像枚数の平方根以上の最小の整数の値を、前記単位画像に対する前記表示領域の一辺のそれぞれの長さとして前記表示領域の大きさを設定することを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記算出手段は、
前記設定手段により設定された前記整数の値ｎの二乗から、
前記単位画像に対して一辺の長さがそれぞれｋ（ｋ＝２、３、...、Ｍ≦前記設定手段により設定された整数の値）倍である拡大画像の枚数のｋ２−１倍の値に対する、ｋ＝２からｋ＝Ｍまでの各ｋについての当該値の総和と、
前記計数手段により計数された前記画像枚数と、
を減算した値が零となる、前記単位画像に対して一辺の長さがそれぞれｋ倍である拡大画像の枚数の組み合わせを算出することにより、前記一または複数サイズの拡大画像のそれぞれの必要枚数を算出することを特徴とする請求項１乃至３の何れか１項に記載の情報処理装置。
【請求項５】
前記拡大画像のサイズが、前記単位画像に対して一辺の長さがそれぞれ同じ２倍である場合、および、前記単位画像に対して一辺の長さがそれぞれ同じ３倍である場合、
前記算出手段は、前記設定手段により設定された前記整数の二乗から、前記単位画像に対して一辺の長さがそれぞれ２倍である拡大画像の枚数の３倍の値と、前記単位画像に対して一辺の長さがそれぞれ３倍である拡大画像の枚数の８倍の値と、前記計数手段により計数された前記画像枚数と、を減算した値が零となる、前記単位画像に対して一辺の長さがそれぞれ２倍である拡大画像の枚数と、前記単位画像に対して一辺の長さがそれぞれ３倍である拡大画像の枚数と、の組み合わせを算出することにより、前記一または複数サイズの拡大画像のそれぞれの必要枚数を算出することを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記レイアウト手段は、
前記算出手段により算出された前記必要枚数の一または複数サイズの前記拡大画像と、前記単位画像と、を前記表示領域にレイアウトする際に、前記拡大画像同士が重ならない配置をレイアウト候補として生成する生成手段と、
前記レイアウト候補のうち、１つのレイアウト候補を選択する選択手段と、を備え、
前記選択手段により選択されたレイアウト候補により、前記一または複数サイズの前記拡大画像と、前記単位画像とを前記表示領域にレイアウトすることを特徴とする請求項１乃至５の何れか１項に記載の情報処理装置。
【請求項７】
前記レイアウト手段によりレイアウトされた前記一または複数サイズの前記拡大画像または前記単位画像を前記表示領域から削除する削除手段と、
前記削除手段により削除された前記一または複数サイズの前記拡大画像または前記単位画像を前記表示領域に再び追加する追加手段と、をさらに備え、
前記計数手段は、前記削除手段または前記追加手段により削除または追加された場合、前記画像枚数を改めて計数することを特徴とする請求項６に記載の情報処理装置。
【請求項８】
前記レイアウト手段によりレイアウトされた前記一または複数サイズの前記拡大画像または前記単位画像のうち１つをユーザに指定させる指定手段と、
前記指定手段により指定された前記一または複数サイズの前記拡大画像または前記単位画像のうちの１つを縦横方向にシフトした場合に、シフト先に存在する他の拡大画像または単位画像の全てを包含する位置を、シフト可能な前記表示領域における位置として算出するシフト可能位置算出手段と、
前記シフト可能位置算出手段により算出されたシフト可能な前記表示領域における位置のうち１つをユーザに選択させるシフト可能位置選択手段と、
前記シフト可能位置選択手段により選択されたシフト可能な前記表示領域における位置に前記一または複数サイズの前記拡大画像または前記単位画像をシフトするシフト手段と、
をさらに備えることを特徴とする請求項６に記載の情報処理装置。
【請求項９】
前記レイアウト手段によりレイアウトされた前記一または複数サイズの前記拡大画像または前記単位画像のうち１つをユーザに指定させる画像指定手段と、
前記画像指定手段により指定された前記一または複数サイズの前記拡大画像または前記単位画像と、前記表示領域における他の拡大画像または単位画像と、の前記表示領域における位置およびサイズを交換する交換手段と、
をさらに備えることを特徴とする請求項６に記載の情報処理装置。
【請求項１０】
画像のレイアウトを行う情報処理方法であって、
計数手段が、同一の縦横比を有する複数枚の画像の画像枚数を計数する計数工程と、
設定手段が、前記計数工程により計数された前記画像枚数の平方根以上の整数の値をｎとして、前記縦横比を有する表示領域に隙間無くレイアウトする際に最小サイズとなり且つ前記縦横比を有する単位画像に対する前記表示領域の一辺のそれぞれの長さとしてｎ×ｎの大きさを有する表示領域を設定する設定工程と、
算出手段が、前記計数工程により計数された画像枚数と、前記設定工程により設定された整数の値ｎとに基づいて、前記単位画像に対して一辺の長さがそれぞれ同じ整数倍である一または複数サイズの拡大画像と前記単位画像とを前記表示領域に隙間無くレイアウトするために必要な、前記一または複数サイズの拡大画像のそれぞれの必要枚数を算出する算出工程と、
レイアウト手段が、前記算出工程により算出された前記一または複数サイズの拡大画像のそれぞれの必要枚数に基づいて、前記一または複数サイズの前記拡大画像と、前記単位画像とを前記表示領域にレイアウトするレイアウト工程と、
を有することを特徴とする情報処理方法。
【請求項１１】
請求項１０に記載の情報処理方法をコンピュータに実行させるためのプログラム。
【請求項１２】
前記単位画像の縦の長さをＨ、前記単位画像の横の長さをＷとした場合、前記表示領域の縦の長さは、前記設定手段により設定された整数の値ｎ×Ｈ、前記表示領域の横の長さは、前記設定手段により設定された整数の値ｎ×Ｗであることを特徴とする請求項１乃至９の何れか１項に記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像レイアウトを行う情報処理装置、情報処理方法、およびプログラムに関する。
【背景技術】
【０００２】
従来、画像をレイアウトする場合には、テンプレートを用いてレイアウトを自動的に生成し、自動的に生成されたレイアウトを追加的に修正する場合には、選択画像の縦横変更、拡大・縮小を行う方法がある（例えば、特許文献１参照）。また最近では、複数の画像を１枚の用紙にほぼ隙間無く詰め込んで印刷するサービス「シャッフルプリント（シャッフルプリントは富士フィルム株式会社の商品名）」が開始されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平９−１９０５４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
デジタルカメラで撮影した写真を、日付ごとに作成されたフォルダごとに、枠を揃えて隙間無く詰め込んで１ページの用紙に印刷したいという要望がある。
【０００５】
しかしながら、特許文献１では、与えられたテンプレートを用いてレイアウトを自動的に生成するが、任意枚数の画像を1ページに枠を揃えて隙間無く詰め込んでレイアウトするものではない。また、写真の間に隙間があったり、レイアウト枠が揃っていない場合がある。
【０００６】
また、写真のコマ数が、１２、１６、４８、５４、６４、７０のように決まった枚数のときしか１ページに隙間無く詰め込んでレイアウトすることができない場合がある。さらに、先行例では、任意枚数の画像を１ページに隙間無く詰め込んだままの状態で、容易な操作で自動的に生成されたレイアウトを編集して所望のレイアウトを生成することができない。また、自動的に生成したレイアウトだけではユーザの好みに合致しないことがある。また写真の枚数が多くなるとレイアウト候補の組み合わせの数が膨大になるので、自動的にレイアウトを生成するだけではユーザが所望のレイアウトを得ることが困難である。
【０００７】
上記の課題に鑑み、本発明は、縦横比が同じ任意枚数の画像を１ページに枠を揃えて隙間無く詰め込んだレイアウト候補を得ることを目的とする。また、枠を揃えて隙間無く１ページに詰め込むという条件を保ったまま、自動的に生成したレイアウトを容易な操作で編集して所望のレイアウトを得ることを目的とする。
【課題を解決するための手段】
【０００８】
上記の目的の少なくとも１つを達成する、本発明に係る情報処理装置は、
画像レイアウトを行う情報処理装置であって、
同一の縦横比を有する複数枚の画像の画像枚数を計数する計数手段と、
前記計数手段により計数された前記画像枚数の平方根以上の整数の値をｎとして、前記縦横比を有する表示領域に隙間無くレイアウトする際に最小サイズとなり且つ前記縦横比を有する単位画像に対する前記表示領域の一辺のそれぞれの長さとしてｎ×ｎの大きさを有する表示領域を設定する設定手段と、
前記計数手段により計数された画像枚数と、前記設定手段により設定された整数の値ｎとに基づいて、前記単位画像に対して一辺の長さがそれぞれ同じ整数倍である一または複数サイズの拡大画像と前記単位画像とを前記表示領域に隙間無くレイアウトするために必要な、前記一または複数サイズの拡大画像のそれぞれの必要枚数を算出する算出手段と、
前記算出手段により算出された前記一または複数サイズの拡大画像のそれぞれの必要枚数に基づいて、前記一または複数サイズの前記拡大画像と、前記単位画像とを前記表示領域にレイアウトするレイアウト手段と、
を備えることを特徴とする
【発明の効果】
【０００９】
本発明によれば、縦横比が同じ任意枚数の画像を１ページに枠を揃えて隙間無く詰め込むレイアウト候補を得ることが可能になる。さらに、枠を揃えて隙間無く１ページに詰め込むという条件を保ったまま、自動的に生成したレイアウトを容易な操作で編集して所望のレイアウトを得ることが可能になる。
【図面の簡単な説明】
【００１０】
【図１】（ａ）画像レイアウト編集装置１００の構成を示すブロック図、（ｂ）画像レイアウト編集プログラムの操作画面１５０を示す図。
【図２】画像レイアウト処理の操作概要を示す図。
【図３】画像レイアウト編集処理の全体の流れを示すフローチャート。
【図４】レイアウト候補の算出を行う処理Ａの流れを示すフローチャート。
【図５】レイアウト画像枚数がＮ＝２７のとき、本アルゴリズムで得られたレイアウト候補（Ｋ、Ａ、Ｂ）を示す図。
【図６】基本領域Ｐ（Ｉ）を設定する処理Ｂの流れを示すフローチャート。
【図７】基本領域Ｐ（Ｉ）が設定された状態を示す図。
【図８】設定された基本領域Ｐ（Ｉ）に画像を描画する処理Ｃの流れを示す図。
【図９】画像を選択する処理Ｄの流れを示すフローチャート。
【図１０】開始領域番号ＳＩに基本領域番号Iをセットする図。
【図１１】画像を「削除／戻す」処理Ｅの流れを示すフローチャート。
【図１２】画像を「削除」する処理が行われる様子を示す図。
【図１３】画像を「戻す」処理が行われる様子を示す図。
【図１４】選択された画像のシフト可能な位置の算出を行う処理Ｆの流れを示すフローチャート。
【図１５】選択された画像のシフト可能な位置の算出の様子を示す図。
【図１６】選択された画像Ｉｍｇ［Ｐ（Ｉ）］をＤｒａｇしてシフトする処理Ｇの流れを示すフローチャート。
【図１７】選択された画像がシフトする様子を示す図。
【図１８】画像を交換する処理Ｈの流れを示すフローチャート。
【図１９】画像を交換する様子を示す図。
【図２０】レイアウト候補の算出を行う他の実施例である処理Ａ２の流れを示すフローチャート。
【図２１】レイアウト画像枚数がＮ＝２８のとき、本アルゴリズムで得られたレイアウト候補（Ｋ、Ａ、Ｂ、Ｃ、Ｄ）の例を示す図。
【図２２】画面の小さいデジタルカメラに本発明を適用した例を示す図。
【発明を実施するための形態】
【００１１】
同一の縦横比を有する複数枚の画像の全てを、同一の縦横比を有する表示領域に重複無く且つ隙間無くレイアウトする情報処理装置（画像レイアウト編集装置）について、以下詳述する。
【００１２】
（第１実施形態）
＜画像レイアウト編集装置の構成図＞
まず、図１（ａ）を参照して、画像レイアウト編集装置に適用可能な構成を示したブロック構成について説明する。画像レイアウト編集装置１００は、ＣＰＵ１０１と、ＲＯＭ１０２と、ＲＡＭ１０３と、画像記憶部１０４と、表示部１０５と、操作部１０６と、入力イベント処理部１０７とを備える。画像レイアウト編集装置１００は、ＲＯＭ１０２に記憶された画像レイアウト編集プログラムをＣＰＵ１０１が読み出して実行することによって動作する。ＲＡＭ１０３を用いて、画像レイアウト編集プログラムの実行中に使用される変数や画像データの読み書きが行われる。表示部１０５は、ディスプレイ等である。ユーザは操作部１０６（例えば、マウス）によって操作を行い、ユーザのマウス操作は入力イベント処理部１０７によって、マウスＤｏｗｎ、マウスＵｐ、マウスＤｒａｇ、マウスＭｏｖｅのいずれであるかが解析される。画像記憶部１０４には日付ごとに画像フォルダが形成されており、画像フォルダにはそれぞれ何枚かの写真の画像が記憶されている。  ＜画像レイアウト編集装置の操作画面＞
次に、図１（ｂ）を参照して、表示部１０５に表示される画像レイアウト編集プログラムの操作画面１５０について説明する。操作画面１５０には、操作ボタン領域１５１、操作モード表示領域１５２、フォルダ表示領域１５３、メインレイアウト表示領域１５４、メイン画像枚数表示領域１５５、「削除／戻す」領域１５６、サブレイアウト表示領域１５７、サブ画像枚数表示領域１５８、およびレイアウト候補表示領域１５９が配置されている。
【００１３】
操作ボタン領域１５１には、「↑」ボタン１５１ａ、「↓」ボタン１５１ｂ、「＜」ボタン１５１ｃ、「＞」ボタン１５１ｄ、「ＳＦＴ」ボタン１５１ｅ（画像シフトモードに移る／戻る）、「ＥＸ」ボタン１５１ｆ（画像交換モードに移る／戻る）が配置されている。操作モード表示領域１５２には、操作モードを説明するテキストが表示される。
【００１４】
フォルダ表示領域１５３には、画像記憶部１０４に形成された画像フォルダのフォルダ名である、Ｆｏｌｄｅｒ−１、Ｆｏｌｄｅｒ−２、・・・、およびＦｏｌｄｅｒ−Ｎが表示される。メインレイアウト表示領域１５４には、縦横比が同じ任意の枚数の画像が隙間無くレイアウトされて表示される。
【００１５】
メイン画像枚数表示領域１５５には、メインレイアウト表示領域１５４に表示された画像の枚数が表示される。サブレイアウト表示領域１５７には、メインレイアウト表示領域１５４から削除された画像が表示される。サブ画像枚数表示領域１５８には、サブレイアウト表示領域１５７に表示された画像の枚数が表示される。
【００１６】
レイアウト候補表示領域１５９には、レイアウト候補Ｃａｎｄ−１、Ｃａｎｄ−２、・・・Ｃａｎｄ−７が表示される。
【００１７】
＜マウスによる基本操作＞
フォルダの選択では、マウスを操作して「↑」ボタン１５１ａまたは「↓」ボタン１５１ｂを押下すると、選択中のフォルダがハイライトされる。ユーザは、Ｆｏｌｄｅｒ−１、Ｆｏｌｄｅｒ−２、・・・、Ｆｏｌｄｅｒ−Ｎの中から所望の画像フォルダを選択する。レイアウト候補の選択では、マウスを操作して「＜」ボタン１５１ｃと「＞」ボタン１５１ｄを押下すると選択中のレイアウト候補がハイライトされる。ユーザは、Ｃａｎｄ−１、Ｃａｎｄ−２、・・・Ｃａｎｄ−７の中から所望のレイアウト候補を選択する。
【００１８】
最初、操作モード表示領域１５２には「画像選択モード」と表示されている。「ＳＦＴ」ボタン１５１ｅを押下すると、画像選択モードから画像シフトモードに移行する。画像シフトモードに移行すると、操作モード表示領域１５２には「画像シフトモード」と表示される。画像シフトモードでは、「ＳＦＴ」ボタン１５１ｅと「ＥＸ」ボタン１５１ｆのみがアクティブになり、「↑」ボタン１５１ａと「↓」ボタン１５１ｂと「＜」ボタン１５１ｃと「＞」ボタン１５１ｄとはロックされる。画像シフトモードから画像選択モードに戻るには、「ＳＦＴ」ボタン１５１ｅを押下する。画像シフトモードから画像交換モードに移るには、「ＥＸ」ボタン１５１ｆを押下する。画像交換モードに移行すると、操作モード表示領域１５２には「画像交換モード」と表示される。画像交換モードでは、「ＥＸ」ボタン１５１ｆのみがアクティブになり、「↑」ボタン１５１ａと「↓」ボタン１５１ｂと「＜」ボタン１５１ｃと「＞」ボタン１５１ｄと「ＳＦＴ」ボタン１５１ｅとはロックされる。画像交換モードから画像シフトモードに戻るには、「ＥＸ」ボタン１５１ｆを押下する。
【００１９】
メインレイアウト表示領域１５４に表示された画像を削除するには、削除したい画像をマウスで選択してからドラッグして「削除／戻す」領域１５６に移動する。すると、選択された画像がメインレイアウト表示領域１５４から削除されて、削除された画像はサブレイアウト表示領域１５７に表示される。サブレイアウト表示領域１５７に表示された画像をメインレイアウト表示領域１５４に戻して追加したいには、戻したい画像をマウスで選択してからドラッグして「削除／戻す」領域１５６に移動する。すると、サブレイアウト表示領域１５７からメインレイアウト表示領域１５４に画像が戻されて表示される。メインレイアウト表示領域１５４内での画像のシフト操作および交換操作もマウスのドラッグによって行われる。
【００２０】
＜レイアウト処理の操作概要＞
図２（ａ）〜（ｈ）を参照して、画像レイアウト編集装置１００における、レイアウト処理の操作概要を説明する。
【００２１】
画像レイアウト編集プログラムを立ち上げると、画像記憶部１０４に記憶された画像フォルダおよび各画像フォルダ内の画像ファイルが読み込まれる。読み込んだ画像フォルダ名と各画像フォルダに含まれる画像枚数および画像ファイル名とを記憶して、フォルダ表示領域１５３に画像フォルダ名を表示する。
【００２２】
図２（ａ）に示すＰｈａｓｅ１では、ユーザはマウスで「↑」ボタン１５１ａまたは「↓」ボタン１５１ｂを押下して所望の画像フォルダを選択する。画像フォルダが選択されると、選択された画像フォルダがハイライト表示される。
【００２３】
図２（ｂ）に示すＰｈａｓｅ２では、画像フォルダ内の画像を隙間無く詰め込んでレイアウト表示する処理が実行される。まず画像フォルダ内の画像枚数がカウントされてメイン画像枚数表示領域１５５に表示される。図２（ｂ）に示す例では、画像枚数は６７枚である。次に画像フォルダ内の画像ファイルがメインレイアウト表示領域１５４に隙間無く詰め込まれて表示される。また同じ画像枚数で拡大画像同士を重複することなく且つ隙間無く詰め込むことができるレイアウト候補がレイアウト候補表示領域１５９に最大７個表示される。
【００２４】
図２（ｃ）に示すＰｈａｓｅ３では、優先順位指定部で指定した優先順位に従って画像を並べ替える処理が実行される。例えば顔の含まれている画像を優先するように優先順位指定部で指定する。すると優先順位指定部に含まれる顔認識によって、顔を含む尤度の高い順に画像Ｆ１、Ｆ２、Ｆ３、Ｆ４、Ｆ５、Ｆ６が選出され、読み込まれた画像が優先順位に従って並べ替えられて表示される。画像に対する優先順位の指定は、顔らしさ以外に、時間順、特定のイベントを含む尤度などに基づいて行われてもよい。
【００２５】
図２（ｄ）に示すＰｈａｓｅ４では、メインレイアウト表示領域１５４から失敗写真などの不要な画像を削除する処理が実行される。画像を削除するときは、メインレイアウト表示領域１５４内の不要な画像をマウスで選択して、「削除／戻す」領域１５６にドラッグする。すると選択された画像がメインレイアウト表示領域１５４から削除されて、サブレイアウト表示領域１５７に移動する。削除した画像を戻すときは、サブレイアウト表示領域１５７内の不要な画像をマウスで選択して、「削除／戻す」領域１５６にドラッグする。すると選択された画像がサブレイアウト表示領域１５７からメインレイアウト表示領域１５４に戻される。
【００２６】
図２（ｅ）に示すＰｈａｓｅ５では、同じ画像枚数のもとで、別のレイアウト候補を選択する処理が実行される。ユーザはマウスで「＜」ボタン１５１ｃまたは「＞」ボタン１５１ｄを押下して、レイアウト候補表示領域１５９に表示されたレイアウト候補の中から所望の候補を選択する。
【００２７】
図２（ｆ）に示すＰｈａｓｅ６では、大きいサイズの画像の配置を編集したり画像を交換したりする処理が実行される。画像シフトモードでは大きいサイズの画像をマウスで選択するとシフト可能な位置が表示され、シフト可能な位置に選択した画像をドラッグすると、大きいサイズの画像がシフトする。画像交換モードでは、画像を選択してドラッグすると、ドラッグ元の画像とドラッグ先の画像とが交換される。
【００２８】
図２（ｇ）に示すＰｈａｓｅ７では、レイアウトが完成した画像を印刷する処理が実行される。すると図２（ｈ）に示すように、任意の枚数の画像が１枚の用紙に隙間無く詰め込んで印刷される。
【００２９】
＜画像レイアウト編集処理の全体の流れ図＞
図３を参照して、画像レイアウト編集処理の全体の流れについて説明する。これは、図２のレイアウト処理の操作概要に対応している。
【００３０】
ステップＳ３０１において、初期フォルダを設定する。ステップＳ３０２において、処理を終了するか否か判定する。終了でなければ（ステップＳ３０２；ＮＯ）、ステップＳ３０３に進む。一方、終了であれば（ステップＳ３０２；ＹＥＳ）、処理を終了する。
【００３１】
ステップＳ３０３において、フォルダ内の画像ファイル数をカウントして変数Ｎ０にセットし、画像ファイルを配列Ｉｍｇ［０］〜Ｉｍｇ［Ｎ０−１］に読み込む。
【００３２】
ステップＳ３０４において、メイン画像枚数ＭＮにＮ０をセットし、サブ画像枚数ＳＮに０をセットし、レイアウト画像枚数ＮにＮ０をセットする。
【００３３】
ステップＳ３０５の処理Ａにおいて、与えられたレイアウト画像枚数Ｎに対してレイアウト候補の組（Ｋ、Ａ、Ｂ）［ｉ］（ｉ＝０、１、・・・）を求める。処理Ａについては図４、図５を参照して後述する。
【００３４】
ステップＳ３０６の処理Ｂにおいて、メインレイアウト表示領域１５４とサブレイアウト表示領域１５７とに画像を配置するための、基本領域Ｐ（Ｉ）を設定する。処理Ｂについては図６、図７を参照して後述する。
【００３５】
ステップＳ３０７の処理Ｃにおいて、設定された基本領域Ｐ（Ｉ）の値に従って画像を描画する。処理Ｃについては図８を参照して後述する。ステップＳ３０８において、選択中の画像フォルダがユーザの所望のフォルダであるか否かが判定される。すなわち、選択中の画像フォルダでＯＫかどうかをユーザに確認する。選択中の画像フォルダがユーザの所望のフォルダであると判定された場合（ステップＳ３０８；ＹＥＳ）、ステップＳ３１０に進む。一方、選択中の画像フォルダがユーザの所望のフォルダでないと判定された場合（ステップＳ３０８；ＮＯ）、ステップＳ３０９に進む。
【００３６】
ステップＳ３０９において、次／前のフォルダを選択して、ステップＳ３０３に戻る。ステップＳ３１０において、優先順位設定部で設定した優先順位でＯＫかどうかをユーザに確認する。優先順位設定部で設定した優先順位でよいと判断された場合（ステップＳ３１０；ＹＥＳ）、ステップＳ３１４に進む。一方、優先順位設定部で設定した優先順位ではよくないと判断された場合（ステップＳ３１０；ＮＯ）、ステップＳ３１１に進む。
【００３７】
ステップＳ３１１において、優先順位を設定する。優先順位設定部は、顔やスマイル、時刻や場所などのいずれを優先して画像を並べ替えるかを設定する。
【００３８】
ステップＳ３１２において、設定された優先順位に従って画像Ｉｍｇ［０］〜Ｉｍｇ［Ｎ０−１］に尤度が付与され、尤度順に画像が並べ替えられる。ステップＳ３１３の処理Ｃにおいて、尤度順に並べ替えられた画像は、ステップＳ３０７と同様に基本領域Ｐ（Ｉ）の値に従って描画される。その後、ステップＳ３１０に戻る。
【００３９】
一方、ステップＳ３１４において、メイン画像枚数ＭＮにＮ０をセットし、サブ画像枚数ＳＮに０をセットする。ステップＳ３１５において、メインレイアウト表示領域１５４に表示されている画像セットがＯＫかどうかをユーザに確認する。メインレイアウト表示領域１５４に表示されている画像セットでよいと判断された場合（ステップＳ３１５；ＹＥＳ）、ステップＳ３２１に進む。一方、メインレイアウト表示領域１５４に表示されている画像セットでよくないと判断された場合（ステップＳ３１５；ＮＯ）、ステップＳ３１６の処理Ｄに進む。
【００４０】
ステップＳ３１６の処理Ｄにおいて、ユーザはマウスＤｏｗｎによって画像を選択する。処理Ｄについては図９、図１０を参照して後述する。ステップＳ３１７の処理Ｅにおいて、ステップＳ３１６で選択された画像をメインレイアウト表示領域１５４からサブレイアウト表示領域１５７に移動（削除）したり、選択された画像をサブレイアウト表示領域１５７からメインレイアウト表示領域１５４に移動（戻す）したりする。処理Ｅについては図１１、図１２、図１３を参照して後述する。
【００４１】
ステップＳ３１８の処理Ａにおいて、画像を削除したり戻したりした結果、新たなレイアウト画像枚数Ｎに対して、ステップＳ３０５と同様にレイアウト候補の組（Ｋ、Ａ、Ｂ）［ｉ］（ｉ＝０、１、・・・）を求める。
【００４２】
ステップＳ３１９の処理Ｂにおいて、ステップＳ３０６と同様に、メインレイアウト表示領域１５４とサブレイアウト表示領域１５７とに画像を配置するための、基本領域Ｐ（Ｉ）を設定する。ステップＳ３２０の処理Ｃにおいて、ステップＳ３０７と同様に、設定された基本領域Ｐ（Ｉ）の値に従って画像を描画する。その後、ステップＳ３１５に戻る。
【００４３】
一方、ステップＳ３２１において、優先順位設定部によって設定された優先順位に従ってレイアウト候補を並べ替える。ここではレイアウト候補全体に対して設定した尤度に基づいて、尤度順にレイアウト候補を並べ替えてレイアウト候補表示領域１５９に表示する。
【００４４】
ステップＳ３２２において、選択中のレイアウト候補でＯＫかどうかユーザに確認する。選択中のレイアウト候補でよいと判断された場合（ステップＳ３２２；ＹＥＳ）、ステップＳ３２６に進む。一方、選択中のレイアウト候補でよくないと判断された場合（ステップＳ３２２；ＮＯ）、ステップＳ３２３に進む。
【００４５】
ステップＳ３２３において、次／前のレイアウト候補を表示して選択する。ステップＳ３２４の処理Ｂにおいて、ステップＳ３０６と同様に、メインレイアウト表示領域１５４とサブレイアウト表示領域１５７とに画像を配置するための、基本領域Ｐ（Ｉ）を設定する。
【００４６】
ステップＳ３２５の処理Ｃにおいて、ステップＳ３０７と同様に、設定された基本領域Ｐ（Ｉ）の値に従って画像を描画する。その後、ステップＳ３２２に戻る。
【００４７】
一方、ステップＳ３２６において、メインレイアウト表示領域１５４に表示されているレイアウト画像を印刷するかどうかをユーザに確認する。レイアウト画像を印刷すると判断された場合（ステップＳ３２６；ＹＥＳ）、ステップＳ３２７に進む。ステップＳ３２７において、メインレイアウト表示領域１５４に表示されている画像を印刷する。一方、レイアウト画像を印刷しないと判断された場合（ステップＳ３２７；ＮＯ）、ステップＳ３２８に進む。
【００４８】
ステップＳ３２８において、画像をシフトするかどうかをユーザに確認する。画像をシフトしないと判断された場合（ステップＳ３２８；ＮＯ）、ステップＳ３０２に戻る。一方、画像をシフトすると判断された場合（ステップＳ３２８；ＹＥＳ）、ステップＳ３２９に進む。
【００４９】
ステップＳ３２９の処理Ｆにおいて、選択中の画像のシフト可能位置を算出して表示する。処理Ｆについては図１４、図１５を参照して後述する。ステップＳ３３０の処理Ｇにおいて、選択中の画像をマウスＤｒａｇしてシフトする（図１７（ａ）〜（ｂ））。するとマウス操作に応じて、基本領域Ｐ（Ｉ）の値が書き換えられる（図１６、図１７（ｃ）〜（ｄ））。処理Ｇについては図１６、図１７を参照して後述する。
【００５０】
ステップＳ３３１の処理Ｃにおいて、ステップＳ３０７と同様に、設定された基本領域Ｐ（Ｉ）の値に従って画像を描画する（図１７（ｅ））。
【００５１】
ステップＳ３３２において、画像を交換するかどうかをユーザに確認する。画像を交換しないと判断された場合（ステップＳ３３２；ＮＯ）、ステップＳ３２６に戻る。一方、画像を交換すると判断された場合（ステップＳ３３２；ＹＥＳ）、ステップＳ３３３に進む。
【００５２】
ステップ３３３の処理Ｄにおいて、ステップＳ３１６と同様に、ユーザがマウスＤｏｗｎによって交換元の画像を選択する。ステップＳ３３４の処理Ｈにおいて、ユーザがマウスＤｒａｇして交換先の画像を選択し（図１９（ａ））、マウスＵｐによって交換元の画像と交換先の画像を入れ替える（図１９）。処理Ｈについては図１８、図１９を参照して後述する。
【００５３】
ステップＳ３３５の処理Ｃにおいて、ステップＳ３０７と同様に、設定された基本領域Ｐ（Ｉ）の値に従って画像を描画する（図１９（ｃ））。その後、ステップＳ３３２に戻る。
【００５４】
以上で、画像レイアウト編集処理の全体の流れの説明が終了する。以下、処理Ａ、処理Ｂ、…、処理Ｇの各処理の詳細について説明する。
【００５５】
＜レイアウト候補の算出：処理Ａ＞
まず、図４を参照しては、ステップＳ３０５におけるレイアウト候補の算出を行う処理Ａの流れを説明する。このアルゴリズムでは、表示領域と縦横比が同じＮ枚の画像を、その表示領域に隙間無く詰め込むときに、最小画像に対して一辺が整数倍（ここでは２倍、３倍）の画像をそれぞれ何枚用いればよいかを算出する。ここで、メインレイアウト表示領域１５４における各基本領域Ｐ（Ｉ）の大きさが、最小画像のサイズである。
【００５６】
ステップＳ４０１において、レイアウト画像枚数Ｎを計数する。ステップＳ４０２において、√Ｎ以上の最小の自然数を求めて変数Ｋにセットする。ここでＫは、最小画像の一辺の長さを１としたときの表示領域の一辺の長さである。すなわち、最小画像のサイズが縦Ｈ×横Ｗであるとしたとき、縦ＫＨ×横ＫＷのサイズの表示領域を設定する。ただし表示領域の大きさを示す変数Ｋは、必ずしも計数された画像枚数Ｎの平方根以上の最小の整数である必要はなく、画像枚数Ｎの平方根以上の整数であればよい。その整数が値ｎである場合、ｎ×ｎの大きさを有する表示領域を設定する。
【００５７】
ステップＳ４０３において、計数された画像枚数Ｎと、設定された変数Ｋの値とに基づいて、単位画像に対して一辺の長さがそれぞれ同じ整数ｋ倍（ｋ＝２、３、…、Ｍ）である一または複数サイズの拡大画像と単位画像とを表示領域に隙間無くレイアウトするために必要な、一または複数サイズの拡大画像のそれぞれの必要枚数を算出する。ここでは、例えば拡大画像のサイズが２×２（ｋ＝２）および３×３（ｋ＝３）の２種類である場合を考える。具体的には、Ｄ＝Ｋ×Ｋ−３Ａ−８Ｂ−Ｎとセットする。ここで、Ｄは詰め込み判定関数であり、Ａは一辺の長さが最小画像の２倍の画像の枚数、Ｂは一辺の長さが最小画像の３倍の画像の枚数である。すなわち、上記整数の二乗から、単位画像に対して一辺の長さがそれぞれ２倍の拡大画像の枚数の３倍（２２−１倍）の値と、単位画像に対して一辺の長さがそれぞれ３倍の拡大画像の枚数の８倍（３２−１倍）の値と、計数された画像枚数とを減算する。値が零となる、２×２（ｋ＝２）の拡大画像および３×３（ｋ＝３）の拡大画像の組み合わせを算出する。表示領域の一辺の長さＫに対して、詰め込み判定関数Ｄ＝０となる自然数Ａ、Ｂが存在し、かつ、図５（ａ）〜（ｅ）のように詰め込んだときに大きい画像同士が重ならないならば（Ｋ、Ａ、Ｂ）の組はレイアウト候補となる。なお、さらに他のサイズの拡大画像も存在する場合は、詰め込み判定関数Ｄは、Ｄ＝Ｋ×Ｋ−Σ［ｋ＝２、３、・・・、Ｍ］（ｋ２−１）Ｇ（ｋ）−Ｎとなる。上述した例では、Ｇ（２）がＡに相当し、Ｇ（３）がＢに相当する。この一般形については後述する。
【００５８】
ステップＳ４０４において、表示領域の一辺の長さＫに対して、詰め込み判定関数Ｄ＝０となる自然数Ａ、Ｂがあるかどうかを判定する。詰め込み判定関数Ｄ＝０となる自然数Ａ、Ｂがあると判定された場合（ステップＳ４０４；ＹＥＳ）、ステップＳ４０５に進む。一方、詰め込み判定関数Ｄ＝０となる自然数Ａ、Ｂがないと判定された場合（ステップＳ４０４；ＮＯ）、ステップＳ４０８に進む。
【００５９】
ステップＳ４０５において、大きいサイズの画像（一辺の長さが最小画像の２倍の画像：Ａ枚、３倍の画像：Ｂ枚）同士が重ならないかどうか判定する。大きいサイズの画像同士が重なると判定された場合（ステップＳ４０５；ＮＯ）、ステップＳ４０７に進む。一方、大きいサイズの画像同士が重ならないと判定された場合（ステップＳ４０５；ＹＥＳ）、ステップＳ４０６に進む。ステップＳ４０５において、重なり判定は次のように行う。まず、表示領域の左上から右下に向かうラスタースキャン方式で一辺の長さが最小画像の２倍の画像をＡ枚配置する。次に、表示領域の右下から左上に向かうラスタースキャン方式で一辺の長さが最小画像の３倍の画像をＢ枚配置する。このように配置したときに、これらの一辺の長さが最小画像の２倍の画像をＡ枚と、一辺の長さが最小画像の３倍の画像をＢ枚とが何れも重ならないときに、ステップＳ４０５においてＹＥＳと判定する。
【００６０】
ステップＳ４０６において、（Ｋ、Ａ、Ｂ）の組をレイアウト候補として記憶する。ステップＳ４０７において、より多くのレイアウト候補を得たいかどうか判定する。より多くのレイアウト候補を得たいと判定された場合（ステップＳ４０７；ＹＥＳ）、ステップＳ４０８に進む。一方、より多くのレイアウト候補を得る必要がないと判定された場合（ステップＳ４０７；ＮＯ）、処理を終了する。
【００６１】
ステップＳ４０８において、表示画面の一辺の長さＫをインクリメントして、ステップＳ４０３に戻る。なお、必ずしもインクリメントする必要はなく、所定の整数を加算してもよい。
【００６２】
ここで、図５（ａ）〜（ｅ）は、レイアウト画像枚数がＮ＝２７のときに、本アルゴリズムで得られたレイアウト候補（Ｋ、Ａ、Ｂ）を示す。図５（ａ）は、レイアウト候補（Ｋ、Ａ、Ｂ）＝（６、３、０）の場合である。図５（ｂ）は、レイアウト候補（Ｋ、Ａ、Ｂ）＝（７、２、２）の場合である。図５（ｃ）は、レイアウト候補（Ｋ、Ａ、Ｂ）＝（８、７、２）の場合である。図５（ｄ）は、レイアウト候補（Ｋ、Ａ、Ｂ）＝（９、１０、３）の場合である。図５（ｅ）は、レイアウト候補（Ｋ、Ａ、Ｂ）＝（９、２、６）の場合である。
【００６３】
本アルゴリズムでは、大きいサイズの画像として一辺の長さが最小画像の２倍、３倍の画像を用いているが、画像の枚数が２、３、５枚のときは隙間無く詰め込むことができない。そこでＮ＜６のときは例外処理として、図５（ｆ１）〜（ｆ５）に示すように、何枚かの画像を９０度回転して詰め込んだり、図５（ｇ２）、（ｇ３）、（ｇ５）のように同じ画像を２回使って詰め込む。
【００６４】
以上がレイアウト候補の算出を行う処理Ａの詳細である。
【００６５】
＜基本領域Ｐ（Ｉ）の設定：処理Ｂ＞
次に、図６および図７を参照して、基本領域Ｐ（Ｉ）を設定する処理Ｂの流れを説明する。この処理で用いるレイアウト候補（Ｋ、Ａ、Ｂ）は、処理Ａ（図４）のアルゴリズムにおいてレイアウト画像枚数Ｎにメイン画像枚数ＭＮをセットして算出する。
【００６６】
ステップＳ６０１において、すべての基本領域番号Ｉに対して、基本領域Ｐ（Ｉ）の値を初期化する（Ｐ（Ｉ）←−１）。すなわち、Ｐ（Ｉ）を−１で初期化する。ステップＳ６０２において、メインレイアウト表示領域１５４をＫ×Ｋ個の基本領域Ｐ（Ｉ）に分割する（図７（ａ））。メインレイアウト表示領域１５４における各基本領域Ｐ（Ｉ）の大きさが、最小サイズの画像となる。次に、図７（ｃ）に示すように、メインレイアウト表示領域１５４内の基本領域Ｐ（Ｉ）に値を設定する。
【００６７】
まずステップＳ６０３において、メインレイアウト表示領域１５４の左上から右下に向かうラスタスキャン方式で、２×２の大きさの４倍領域をＡ個設定し、４倍領域に数値を０から順番にセットする。４倍領域内の４個の基本領域Ｐ（Ｉ）には４倍領域に設定した数値と同じ数値をセットする。本発明において、「表示領域の左上から右下に向かうラスタースキャン方式で領域を設定」とは、例えば図７（ａ）において、Ｐ（０）、Ｐ（１）、・・・、Ｐ（６）、Ｐ（７）、Ｐ（８）、・・・、のような順番で領域を設定することを言う。
【００６８】
次にステップＳ６０４において、メインレイアウト表示領域１５４の右下から左上に向かうラスタスキャン方式で、３×３の大きさの９倍領域をＢ個設定し、９倍領域に数値を順番にセットする。本発明において、「表示領域の右下から左上に向かうラスタースキャン方式で領域を設定」とは、例えば図７（ａ）において、Ｐ（４８）、Ｐ（４７）、・・・、Ｐ（４２）、Ｐ（４１）、Ｐ（４０）、・・・、のような順番で領域を設定することを言う。
【００６９】
さらにステップＳ６０５において、残りのＭＮ−Ａ−Ｂ個の基本領域Ｐ（Ｉ）にも数値を順番にセットする。
【００７０】
また、ステップＳ６０６において、サブレイアウト表示領域１５７に、ＳＮ枚の画像を配置するためにＳＮ個以上の基本領域Ｐ（Ｉ）を設定する（図７（ｂ））。ステップＳ６０７において、図７（ｄ）に示すように、サブレイアウト表示領域１５７のＳＮ個の基本領域Ｐ（Ｉ）にも順番に数値をセットする。
【００７１】
図７（ｃ）、（ｄ）で示すように、Ｐ（０）＝０、Ｐ（１）＝０、Ｐ（２）＝１、Ｐ（３）＝１、Ｐ（４）＝４、Ｐ（５）＝５、Ｐ（６）＝６、Ｐ（７）＝０、Ｐ（８）＝０、Ｐ（９）＝１、Ｐ（１０）＝１、Ｐ（１１）＝７、・・・のように基本領域の値がセットされる。
【００７２】
以上が基本領域Ｐ（Ｉ）を設定する処理Ｂの詳細である。
【００７３】
＜画像の描画：処理Ｃ＞
図８を参照して、設定された基本領域Ｐ（Ｉ）に画像を描画する処理Ｃの流れを説明する。まず、メインレイアウト表示領域１５４内の基本領域Ｐ（Ｉ）の値に応じて画像を描画する（図８（ａ）〜（ｂ））。ここでは最初に、隣接する３×３の９つの基本領域Ｐ（Ｉ）が同じ値Ｊである９倍領域に対しては、一辺の長さが最小画像の３倍の画像Ｉｍｇ［Ｊ］を描画する。次に、隣接する２×２の４つの基本領域Ｐ（Ｉ）が同じ値Ｊである４倍領域に対しては、一辺の長さが最小画像の２倍の画像Ｉｍｇ［Ｊ］を描画する。最後に、残りの基本領域Ｐ（Ｉ）＝Ｊに対して、最小画像サイズの画像Ｉｍｇ［Ｊ］を描画する。
【００７４】
さらに、サブレイアウト表示領域１５７内の基本領域Ｐ（Ｉ）の値に応じて画像を描画する（図８（ｃ）〜（ｄ））。ここでは基本領域Ｐ（Ｉ）＝Ｊに対して、画像Ｉｍｇ［Ｊ］を描画する。このようにして、一または複数サイズの拡大画像のそれぞれの必要枚数に基づいて、拡大画像と単位画像とを表示領域にレイアウトすることができる。
【００７５】
以上が、設定された基本領域Ｐ（Ｉ）に画像を描画する処理Ｃの詳細である。
【００７６】
＜画像の選択：処理Ｄ＞
図９および図１０を参照して、画像を選択する処理Ｄの流れを説明する。まず、ステップＳ９０１において、マウスＤｏｗｎした位置（Ｘ、Ｙ）を検出する。
【００７７】
ステップＳ９０２において、マウスＤｏｗｎした位置（Ｘ、Ｙ）がメインレイアウト表示領域１５４内の領域Ｐ（Ｉ）内にあるか否かが判断される。位置（Ｘ、Ｙ）がメインレイアウト表示領域１５４内の領域Ｐ（Ｉ）内にあると判断された場合（ステップＳ９０２；ＹＥＳ）、ステップＳ９０３に進む。一方、位置（Ｘ、Ｙ）がメインレイアウト表示領域１５４内の領域Ｐ（Ｉ）内にないと判断された場合（ステップＳ９０２；ＮＯ）、ステップＳ９０５に進む。
【００７８】
ステップＳ９０３において、開始領域番号ＳＩに基本領域番号Iをセットする。ステップＳ９０４において、位置（Ｘ、Ｙ）にある画像の大きさと範囲を取得する。その後、処理が終了する。
【００７９】
また、ステップＳ９０５において、マウスＤｏｗｎした位置（Ｘ、Ｙ）がサブレイアウト表示領域１５７内の領域Ｐ（Ｉ）内にあるか否かが判断される。位置（Ｘ、Ｙ）がサブレイアウト表示領域１５７内の領域Ｐ（Ｉ）内にあると判断された場合（ステップＳ９０５；ＹＥＳ）、ステップＳ９０６に進む。一方、位置（Ｘ、Ｙ）がサブレイアウト表示領域１５７内の領域Ｐ（Ｉ）内にないと判断された場合（ステップＳ９０５；ＮＯ）、処理が終了する。ステップＳ９０６において、開始領域番号ＳＩに基本領域番号Iをセットする。その後、処理が終了する。
【００８０】
図１０（ａ）のようなメインレイアウト表示領域１５４内の矢印の位置でマウスＤｏｗｎが検出されると、開始領域番号ＳＩに矢印が示す番号である３２がセットされる。同様に、図１０（ｂ）のようなサブレイアウト表示領域１５７内の矢印の位置でマウスＤｏｗｎが検出されると、開始領域番号ＳＩに矢印が示す番号である５２がセットされる。
【００８１】
以上が画像を選択する処理Ｄの詳細である。
【００８２】
＜画像を「削除／戻す」：処理Ｅ＞
図１１、図１２、および図１３を参照して、画像を「削除／戻す」処理Ｅの流れを説明する。
【００８３】
ステップＳ１１０１において、マウスＵｐの位置（Ｘ、Ｙ）を検出する。ステップＳ１１０２において、マウスＵｐの位置が「削除／戻す」領域１５６内にあるかどうかを判定する。マウスＵｐの位置が「削除／戻す」領域１５６内にあると判定された場合（ステップＳ１１０２；ＹＥＳ）、ステップＳ１１０３に進む。。一方、マウスＵｐの位置が「削除／戻す」領域１５６内にないと判定された場合（ステップＳ１１０２；ＮＯ）、処理を終了する。
【００８４】
ステップＳ１１０３において、処理Ｄで求められた開始領域番号ＳＩに対応する基本領域Ｐ（ＳＩ）がメインレイアウト表示領域１５４内にあるかどうか判定する。基本領域Ｐ（ＳＩ）がメインレイアウト表示領域１５４内にあると判定された場合（ステップＳ１１０３；ＹＥＳ）、ステップＳ１１０４に進む。一方、基本領域Ｐ（ＳＩ）がメインレイアウト表示領域１５４内にないと判定された場合（ステップＳ１１０３；ＮＯ）、ステップＳ１１０７に進む。
【００８５】
ステップＳ１１０４において、画像Ｉｍｇ［Ｐ（ＳＩ）］をメインレイアウト表示領域１５４から削除して、それをサブレイアウト表示領域１５７の最後の画像Ｉｍｇ［ＭＮ＋ＳＮ−１］とする。
【００８６】
ステップＳ１１０５において、メイン画像枚数ＭＮをディクリメントし、サブ画像枚数ＳＮをインクリメントする。ステップＳ１１０６において、レイアウト画像枚数Ｎにメイン画像枚数ＭＮをセットする。その後、処理を終了する。
【００８７】
また、ステップＳ１１０７において、処理Ｄで求められた開始領域番号ＳＩに対応する基本領域Ｐ（ＳＩ）がサブレイアウト表示領域１５７内にあるかどうか判定する。基本領域Ｐ（ＳＩ）がサブレイアウト表示領域１５７内にあると判定された場合（ステップＳ１１０７；ＹＥＳ）、ステップＳ１１０８に進む。一方、基本領域Ｐ（ＳＩ）がサブレイアウト表示領域１５７内にないと判定された場合（ステップＳ１１０７；ＮＯ）、処理を終了する。
【００８８】
ステップＳ１１０８において、画像Ｉｍｇ［Ｐ（ＳＩ）］をサブレイアウト表示領域１５７から削除して、それをメインレイアウト表示領域１５４の最初の画像Ｉｍｇ［０］とする。
【００８９】
ステップＳ１１０９において、メイン画像枚数ＭＮをインクリメントし、サブ画像枚数ＳＮをディクリメントする。ステップＳ１１１０において、レイアウト画像枚数Ｎにメイン画像枚数ＭＮをセットする。その後、処理を終了する。
【００９０】
図１２は画像を「削除」する処理が行われる様子を示す図である。図の矢印で示すように、マウスでメインレイアウト表示領域１５４内の画像Ｉｍｇ［２］を選択して「削除／戻す」領域１５６にＤｒａｇする。すると図１２（ａ）の画像Ｉｍｇ［２］がメインレイアウト表示領域１５４から削除されて、図１２（ｂ）のサブレイアウト表示領域１５７の画像Ｉｍｇ［３８］となる。このとき、メイン画像枚数表示領域１５５のメイン画像枚数ＭＮは、２７から２６にディクリメントされ、サブ画像枚数表示領域１５８のサブ画像枚数ＳＮは、１２から１３にインクリメントされる。
【００９１】
一方、図１３は画像を「戻す」処理が行われる様子を示す図である。図の矢印で示すように、マウスでサブレイアウト表示領域１５７内の画像Ｉｍｇ［２８］を選択して「削除／戻す」領域１５６にＤｒａｇする。すると図１３（ａ）の画像Ｉｍｇ［２８］がサブレイアウト表示領域１５７から削除されて、図１３（ｂ）のメインレイアウト表示領域１５４の画像Ｉｍｇ［０］となる。このとき、メイン画像枚数表示領域１５５のメイン画像枚数ＭＮは、１９から２０にインクリメントされ、サブ画像枚数表示領域１５８のサブ画像枚数ＳＮは、２０から１９にディクリメントされる。
【００９２】
以上が画像を「削除／戻す」処理Ｅの詳細である。
【００９３】
＜画像のシフト：処理Ｆ〜Ｇ＞
図１４、図１５、図１６、及び図１７を参照して、画像のシフトを説明する。
【００９４】
まず、図１４および図１５を参照して、指定された画像のシフト可能な位置の算出を行う処理Ｆの流れを説明する。ユーザにより指定された一または複数サイズの拡大画像または単位画像のうちの１つを縦横方向にシフトした場合に、シフト先に存在する他の拡大画像または単位画像の全てを包含する位置を、シフト可能な表示領域における位置として算出する。
【００９５】
ステップＳ１４０１において、マウスＤｏｗｎの位置（Ｘ、Ｙ）を検出し、位置（Ｘ、Ｙ）の基本領域番号Ｉを求め、画像Ｉｍｇ［Ｐ（Ｉ）］の矩形を求める（図１５（ａ）、（ｂ））。
【００９６】
ステップＳ１４０２において、画像と画像との境界からなる矩形で、選択した矩形を含み、他の矩形と交わらず、選択した矩形と幅が同じ矩形を探す（図１５（ｃ））。
【００９７】
ステップＳ１４０３において、画像と画像との境界からなる矩形で、選択した矩形を含み、他の矩形と交わらず、選択した矩形と高さが同じ矩形を探す（図１５（ｄ））。
【００９８】
ステップＳ１４０４において、ステップＳ１４０２およびステップＳ１４０３で得られた矩形の辺のうち、選択した矩形に含まれない辺をシフト可能位置とする（図１５（ｅ））。
【００９９】
すなわち、図１５（ａ）の位置でマウスＤｏｗｎすると、画像Ｉｍｇ［３］がシフト可能位置として、図１５（ｆ）のＬ１、Ｒ１、Ｕ１、Ｕ２が得られる（シフト可能位置算出）。
【０１００】
以上が画像のシフト可能な位置の算出を行う処理Ｆの詳細である。
【０１０１】
次に、図１６および図１７を参照して、選択された画像Ｉｍｇ［Ｐ（Ｉ）］をＤｒａｇしてシフトを実行する処理Ｇの流れを説明する。
【０１０２】
ステップＳ１６０１において、図１７（ａ）の矢印で示すように画像をマウスＤｒａｇする。画像をマウスＤｒａｇしたと判断された場合（ステップＳ１６０１；ＹＥＳ）、ステップＳ１６０２に進む。一方、画像をマウスＤｒａｇしていないと判断された場合（ステップＳ１６０１；ＮＯ）、処理を終了する。
【０１０３】
ステップＳ１６０２において、Ｄｒａｇ中のマウス位置（Ｘ、Ｙ）がシフト可能位置であるＬ１、Ｒ１、Ｕ１、Ｕ２のいずれかの一定範囲内に近づいたかどうかを判定する。Ｄｒａｇ中のマウス位置（Ｘ、Ｙ）がシフト可能位置のいずれかの一定範囲内に近づいたと判定された場合（ステップＳ１６０２；ＹＥＳ）、ステップＳ１６０３に進む。一方、Ｄｒａｇ中のマウス位置（Ｘ、Ｙ）がシフト可能位置のいずれかの一定範囲内に近づいていないと判定された場合（ステップＳ１６０２；ＮＯ）、ステップＳ１６０４に進む。
【０１０４】
ステップＳ１６０３において、矢印で示すマウス位置（Ｘ、Ｙ）の一定範囲内で最も近くにあるシフト可能位置を太い線で識別表示する（図１７（ｂ））。
【０１０５】
ステップＳ１６０４において、マウスＵｐの有無を判定する。マウスＵｐされたと判定された場合（ステップＳ１６０４；ＹＥＳ）、ステップＳ１６０５に進む。一方、マウスＵｐされていないと判定された場合（ステップＳ１６０４；ＮＯ）、ステップＳ１６０１に戻る。
【０１０６】
ステップＳ１６０５において、マウスＵｐの位置を算出する（シフト可能位置選択処理）。ここでは図１７（ｃ）の位置でマウスＵｐしたと仮定する。
【０１０７】
ステップＳ１６０６において、マウスＤｏｗｎの位置とマウスＵｐの位置に応じて基本領域Ｐ（Ｉ）の値を入れ替える。ここでは最初にマウスＤｏｗｎした位置にあった画像Ｉｍｇ［３］に対応する９つの基本領域Ｐ（Ｉ）の値［３］を２つ上にシフトし、６つの基本領域Ｐ（Ｉ）の値［１１］、［１２］、［１３］、［１８］、［１９］、［２０］を３つ下にシフトする。その結果、基本領域Ｐ（Ｉ）の値は図１７（ｄ）のように入れ替えられる。図３で説明したように、処理Ｇの後に画像を描画する処理Ｃが実行されるので、処理Ｃによって基本領域Ｐ（Ｉ）の値に基づいて画像が描画される（図１７（ｅ））。その後、処理を終了する。
【０１０８】
以上が選択された画像Ｉｍｇ［Ｐ（Ｉ）］をＤｒａｇしてシフトを実行する処理Ｇの詳細である。
【０１０９】
＜画像の交換：処理Ｈ＞
図３で説明したように、画像を選択する処理Ｄ（画像指定処理）の後に、画像を交換する処理Ｈ（画像交換処理）が行われる。図１８および図１９を参照して、画像を交換する処理Ｈの流れを説明する。ここでは、例えば図１９（ａ）の矢印で示すように画像Ｉｍｇ［８］をマウスで画像Ｉｍｇ［３］の位置にＤｒａｇする。
【０１１０】
ステップＳ１８０１において、基本領域Ｐ（ＳＩ）にあった画像Ｉｍｇ［Ｐ（ＳＩ）］をマウスでＤｒａｇ中（図１９（ｂ））であるかどうか判定する。Ｄｒａｇ中であると判定された場合（ステップＳ１８０１；ＹＥＳ）、ステップＳ１８０２に進む。一方、Ｄｒａｇ中でないと判定された場合（ステップＳ１８０１；ＮＯ）、処理を終了する。
【０１１１】
ステップＳ１８０２において、マウスＵｐしたかどうか判定する。マウスＵｐしたと判定された場合（ステップＳ１８０２；ＹＥＳ）、ステップＳ１８０３に進む。一方、マウスＵｐしていないと判定された場合（ステップＳ１８０２；ＮＯ）、ステップＳ１８０１に戻る。
【０１１２】
ステップＳ１８０３において、マウスＵｐの位置（Ｘ、Ｙ）を算出する。ステップＳ１８０４において、位置（Ｘ、Ｙ）がメインレイアウト表示領域１５４内のいずれかの基本領域Ｐ（Ｉ）内にあるかどうかを判定する。位置（Ｘ、Ｙ）が基本領域Ｐ（Ｉ）内にあると判定された場合（ステップＳ１８０４；ＹＥＳ）、ステップＳ１８０５に進む。一方、位置（Ｘ、Ｙ）が基本領域Ｐ（Ｉ）内にないと判定された場合（ステップＳ１８０４；ＮＯ）、処理を終了する。
【０１１３】
ステップＳ１８０５において、終了領域番号ＥＩに基本領域番号Iをセットする。ステップＳ１８０６において、画像Ｉｍｇ［Ｐ（ＳＩ）］と画像Ｉｍｇ［Ｐ（ＥＩ）］とを交換する。ここでは図１９（ｃ）のように、画像Ｉｍｇ［８］と画像Ｉｍｇ［３］とが交換される。以上が画像を交換する処理Ｈの詳細である。
【０１１４】
第１実施形態では、画像枚数が与えられたら、１画面に複数の画像を隙間無く詰め込むための、画面の一辺の長さと、最小画像の枚数と、辺の長さとが最小画像の整数倍（２倍、３倍）の画像の枚数とを算出する。これによって、任意枚数の画像を１画面に隙間無く詰め込むことができるので、省スペースで画面または用紙に無駄が無く、かつ、枠が揃って美しいレイアウトを生成することが可能になる。
【０１１５】
また、第１実施形態では、選択中のレイアウト候補から選択した画像を削除したり戻したりすることができ、削除や戻す操作で画像枚数が変われば、再び画像を１画面に隙間無く詰め込んでレイアウトする。これによって、失敗画像や失敗写真の削除および削除のやり直しが可能となる。
【０１１６】
また、第１実施形態では、選択された画像を含み、他の矩形と交わらず、選択された画像と幅が同じで、画像と画像との境界からなる矩形をすべて求め、求めた矩形の上辺と下辺を求める。また、選択された画像を含み、他の矩形と交わらず、選択された画像と高さが同じで、画像と画像との境界からなる矩形をすべて求め、求めた矩形の左辺と右辺を求める。そして、選択された画像のシフト可能な位置をこのように求めた上辺、下辺、左辺、右辺とし、ユーザにわかりやすく表示する。これによって、ユーザは簡単な操作でシフト可能な位置に画像をシフトして、所望のレイアウトを生成することが可能になる。
【０１１７】
また、第１実施形態では、選択された画像を移動すると、移動先の位置にある画像と選択された画像とを交換する。これによって、所望の位置に所望の画像をレイアウトすることが可能になる。
【０１１８】
（第２実施形態）
＜レイアウト候補の算出を行う他の例：処理Ａ２＞
図２０および図２１を参照して、レイアウト候補の算出を行う他の例である処理Ａ２の流れを説明する。このアルゴリズムでは、表示領域と縦横比が同じＮ枚の画像を表示領域に隙間無く詰め込むときに、最小画像に対して一辺が整数倍（ここでは２倍、３倍、・・・、Ｍ倍）の画像をそれぞれ何枚用いればよいかを算出する。ここで、メインレイアウト表示領域１５４における各基本領域Ｐ（Ｉ）の大きさが、最小画像のサイズである。
【０１１９】
ステップＳ２００１において、レイアウト画像枚数Ｎをセットする。
【０１２０】
ステップＳ２００２において、√Ｎ以上の最小の自然数を求めて変数Ｋにセットする。ここでＫは、最小画像の一辺の長さを１としたときの表示領域の一辺の長さである。
【０１２１】
ステップＳ２００３において、詰め込み判定関数Ｄ＝Ｋ×Ｋ−Σ［Ｌ＝２、・・・Ｍ］（Ｌ×Ｌ−１）Ｇ（Ｌ）−Ｎとセットする。ここで、Σは総和であり、Ｍは使用される可能性のある最大画像の一辺の長さであり、Ｇ（Ｌ）は一辺の長さが最小画像のＬ倍の画像の枚数である。表示領域の一辺の長さＫに対して、詰め込み判定関数Ｄ＝０となる自然数Ｇ（Ｌ：Ｌ＝２、・・・Ｍ）の組が存在し、かつ、図２１（ａ）〜（ｊ）のように詰め込んだときにＬ×Ｌ（Ｌ＝２、３、・・・、Ｍ）サイズの大きい画像同士が重ならないならば（Ｋ、Ｇ（Ｌ：Ｌ＝２、・・・Ｍ））の組はレイアウト候補となる。
【０１２２】
ステップＳ２００４において、表示領域の一辺の長さＫに対して、詰め込み判定関数Ｄ＝０となる自然数Ｇ（Ｌ：Ｌ＝２、・・・Ｍ）の組があるかどうかを判定する。詰め込み判定関数Ｄ＝０となる自然数Ｇ（Ｌ：Ｌ＝２、・・・Ｍ）の組があると判定された場合（ステップＳ２００４；ＹＥＳ）、ステップＳ２００５に進む。一方、詰め込み判定関数Ｄ＝０となる自然数Ｇ（Ｌ：Ｌ＝２、・・・Ｍ）の組がないと判定された場合（ステップＳ２００４；ＮＯ）、ステップＳ２００８に進む。
【０１２３】
ステップＳ２００５において、大きいサイズの画像同士が所定のレイアウトで重ならずに表示領域に配置できるかどうか判定する。大きいサイズの画像同士が所定のレイアウトで重ならずに配置できると判定された場合（ステップＳ２００５；ＹＥＳ）、ステップＳ２００６に進む。一方、大きいサイズの画像同士が重なると判定された場合（ステップＳ２００５；ＮＯ）、ステップＳ２００７に進む。ここで、ステップＳ２００５における重なり判定は、次の処理（Ｓ１）〜（Ｓ３）ようにして行う。（Ｓ１）：Ｌ（≧２）が偶数のとき、空いている表示領域を左上から右下に向かうラスタスキャン方式でスキャンしてＬ×Ｌの大きさの領域を設定可能な領域を探索し、探索した領域に左上から右下に向かうラスタスキャン方式でＬ×Ｌの大きさの領域をＧ（Ｌ）個設定する。（Ｓ２）：Ｌ（≧３）が奇数のとき、空いている表示領域を右下から左上に向かうラスタスキャン方式でスキャンしてＬ×Ｌの大きさの領域を設定可能な領域を探索し、探索した領域に右下から左上に向かうラスタスキャン方式でＬ×Ｌの大きさの領域をＧ（Ｌ）個設定する。（Ｓ３）：変数Ｌ＝２、３、・・・、Ｍに対して、上記（Ｓ１）と（Ｓ２）の処理を繰り返し行い、全てのＬ×Ｌ（Ｌ＝２、３、・・・、Ｍ）の大きさの領域が重ならなければ、ステップＳ２００５でＹＥＳと判定する。
【０１２４】
ステップＳ２００６において、（Ｋ、Ｇ（Ｌ：Ｌ＝２、・・・Ｍ））の組をレイアウト候補として記憶する。
【０１２５】
ステップＳ２００７において、もっと多くのレイアウト候補を得たいかどうか判定する。もっと多くのレイアウト候補を得たいと判定された場合（ステップＳ２００７；ＹＥＳ）、ステップＳ２００８に進む。一方、もっと多くのレイアウト候補を得る必要がないと判定された場合（ステップＳ２００７；ＮＯ）、処理を終了する。
【０１２６】
また、ステップＳ２００８において、表示画面の一辺の長さＫをインクリメントして、ステップＳ２００３に戻る。
【０１２７】
図２１（ａ）〜（ｊ）は、レイアウト画像枚数がＮ＝２８のとき、本アルゴリズムで得られたレイアウト候補（Ｋ、Ｇ（２）、Ｇ（３）、Ｇ（４）、Ｇ（５））＝（Ｋ、Ａ、Ｂ、Ｃ、Ｄ）のいくつかの例を示す。図２１（ａ）は、（Ｋ、Ａ、Ｂ、Ｃ、Ｄ）＝（６、０、１、０、０）の場合である。図２１（ｂ）は、（Ｋ、Ａ、Ｂ、Ｃ、Ｄ）＝（７、７、０、０、０）の場合である。図２１（ｃ）は、（Ｋ、Ａ、Ｂ、Ｃ、Ｄ）＝（７、２、０、１、０）の場合である。図２１（ｄ）は、（Ｋ、Ａ、Ｂ、Ｃ、Ｄ）＝（８、１２、０、０、０）の場合である。図２１（ｅ）は、（Ｋ、Ａ、Ｂ、Ｃ、Ｄ）＝（８、７、０、１、０）の場合である。図２１（ｆ）は、（Ｋ、Ａ、Ｂ、Ｃ、Ｄ）＝（８、４、３、０、０）の場合である。図２１（ｇ）は、（Ｋ、Ａ、Ｂ、Ｃ、Ｄ）＝（８、４、０、０、１）の場合である。図２１（ｈ）は、（Ｋ、Ａ、Ｂ、Ｃ、Ｄ）＝（９、１５、１、０、０）の場合である。図２１（ｉ）は、（Ｋ、Ａ、Ｂ、Ｃ、Ｄ）＝（９、７、４、０、０）の場合である。図２１（ｊ）は、（Ｋ、Ａ、Ｂ、Ｃ、Ｄ）＝（９、７、１、０、１）の場合である。第２実施形態では、画像枚数が与えられたら、１画面に複数の画像を隙間無く詰め込むための、画面の一辺の長さと、最小画像の枚数と、辺の長さが最小画像の整数倍（２倍、３倍、４倍、５倍）の画像の枚数とを算出する。これによって、選択した画像を特に大きいサイズで、すなわち辺の長さを最小画像の４倍、５倍としても表示できる。
【０１２８】
（第３実施形態）
＜小画面への適用例＞
図２２を参照して、本発明を画面の小さいデジタルカメラに適用した例について説明する。本デジタルカメラは本体２２００上に、タッチパネルを表面に配置した入力画面２２０１と操作ボタン類２２０２とが配備されている。
【０１２９】
まず、図２２（ａ）のように操作ボタン類２２０２を操作して、日付ごとに作成された写真フォルダを選択する。
【０１３０】
写真フォルダを選択すると図２２（ｂ）のように、選択されたフォルダ内の写真が読み込まれ、入力画面に隙間無く詰め込まれてレイアウトされ表示される。ここで、ユーザが指で画面の画像ＩＡの位置をタッチする。
【０１３１】
指の大きさは画面上の最小画像サイズより大きいので、指でタッチした位置の中心を算出し、タッチ位置中心にある画像ＩＡと操作メニュー（「削除」、「シフト」、「交換」）を拡大表示する（図２２（ｃ））。ここで、ユーザが「削除」メニューをタッチする。
【０１３２】
すると、画像ＩＡが削除され、新たな枚数でレイアウト候補が算出されて、図２２（ｄ）のようになる。次に、ユーザが指で画面に画像ＩＢの位置をタッチする（図２２（ｄ））。
【０１３３】
すると、指でタッチした位置の中心を算出し、タッチ位置中心にある画像ＩＢと操作メニュー（「削除」、「シフト」、「交換」）を拡大表示する（図２２（ｅ））。ここで、ユーザが「シフト」メニューをタッチする。
【０１３４】
すると、図２２（ｆ）のように、画像ＩＢをシフト可能な位置が表示される。ここで、図２２（ｆ）の矢印で示す位置をユーザが指でなぞって画像をドラッグする。すると、図２２（ｇ）に示すように画像ＩＢがシフトする。次に、ユーザが指で画面に画像ＩＣの位置をタッチする（図２２（ｇ））。すると、指でタッチした位置の中心を算出し、タッチ位置中心にある画像ＩＣと操作メニュー（「削除」、「シフト」、「交換」）を拡大表示する（図２２（ｈ））。ここで、ユーザが「交換」メニューをタッチする。すると、図２２（ｉ）で示すように、画像ＩＣが指で操作可能な大きさに拡大表示される。図２２（ｉ）の矢印で示すようにユーザが指でなぞって画像ＩＣを画像ＩＢの位置にドラッグする。すると、図２２（ｊ）に示すように画像ＩＣと画像ＩＢとが交換される。
【０１３５】
第３実施形態では、画像を選択すると、選択された画像および画像の操作メニューを拡大表示する。選択された画像を指でなぞってドラッグしたり、操作メニューを指でタッチしたりすることで、本発明を小画面の機器に適用することが可能になる。
【０１３６】
（第４実施形態）
また、小さいタッチパネル画面のデジタルカメラやプリンタのような機器に本発明を適用してレイアウト編集を行う場合には、大きい画像は表示するが、小さい画像は表示せずレイアウト枠のみ表示するようにしてもよい。また、大きいサイズの画像のみシフトや交換ができるようにしてもよい。このとき、大きいサイズの画像の領域のみタッチ操作を受け付けて、小さいサイズの画像の領域はタッチ操作を受け付けないようにしてもよい。
【０１３７】
第４実施形態では、小さいサイズの画像は表示せずレイアウト枠のみ表示し、大きいサイズの画像のみシフトや交換ができるようにすることで、小さい画面のタッチパネルによる誤操作を防止できる。
【０１３８】
（その他の実施形態）
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
0005629499.tif 000002
【図２】
0005629499.tif 000003
【図３】
0005629499.tif 000004
【図４】
0005629499.tif 000005
【図５】
0005629499.tif 000006
【図６】
0005629499.tif 000007
【図７】
0005629499.tif 000008
【図８】
0005629499.tif 000009
【図９】
0005629499.tif 000010
【図１０】
0005629499.tif 000011
【図１１】
0005629499.tif 000012
【図１２】
0005629499.tif 000013
【図１３】
0005629499.tif 000014
【図１４】
0005629499.tif 000015
【図１５】
0005629499.tif 000016
【図１６】
0005629499.tif 000017
【図１７】
0005629499.tif 000018
【図１８】
0005629499.tif 000019
【図１９】
0005629499.tif 000020
【図２０】
0005629499.tif 000021
【図２１】
0005629499.tif 000022
【図２２】
0005629499.tif 000023