約 3,280,456 件
https://w.atwiki.jp/mhikichi/pages/21.html
ここでは配列にまつわるプログラムとしてトランプを題材にいろいろなプログラムを作ってみます。 将来的には何らかのトランプゲームになる予定ですが、いろいろなアルゴリズムを実装しながら寄り道します。 準備 HTMLとCSSを準備します。 これまで作ってきたプログラムをForkしても良いですし、一から作成しても良いでしょう。 HTML html body form name="form1" br INPUT TYPE="button" NAME="cmdCalc" value="開始" onclick="start()" /form div id="disp" /div /body /html ポイントはonclickでstart()が起動できるようにすること。 divタグを書いて出力用の領域を置くことです。 CSS body { background-color #DDDDDD; font 30px sans-serif; } なくてもなんとかなりますが、font 30px ぐらいで字の大きさを調整します。 構造体の作り方 構造体を作りますが、厳密に言うとクラスを作成しています。 ここでは、アルゴリズムの習得に特化するために構造体として利用します。 構造体とは、いくつかの変数を1つにまとめた構造をもつ変数です。 これからトランプのカードを表す構造体を作成します。 function Card(mark,num) { this.mark=mark; this.num=num; } トランプにはマーク(スペードとかハート)と数字(A~K)がありますので、その二つをペアで格納するための構造体です。 JavaScriptでは関数を作成する function命令を利用して構造体を作成します。 構造体を作成するときに、markとnumの二つの値を受け取り格納しています。 配列の作り方 それでは、実際にカードを格納するプログラムを書いてみます。 カードはたくさんあるので配列として確保します。 いくつかパターンはありますが、以下のように配列宣言します。この配列変数はこれから作るプログラムで共通に使いますので、先頭に記述します。 var cards=[]; これで、cardsという配列変数の使用を宣言できます。 cards[0]やcards[1]としてカードの情報を取り出すことができます。 カードを作って格納する部分はinitCardという関数を用意して、以下のようにします。 function initCard() { x=0; for(i=1;i =13;i++) { cards[x]=new Card(0,i); x++; cards[x]=new Card(1,i); x++; cards[x]=new Card(2,i); x++; cards[x]=new Card(3,i); x++; } } for( ) は繰り返す命令です。 for( 初期値 ; 繰り返し条件 ; 増分 ) { } という構文で使います。 上のプログラムでは、i=1でスタートして、13以下の間、iを1ずつ増やしながら繰り返す、という意味です。 カードの種類を表すために 0,1,2,3 という数値を使います。直接ハート、スペード等と入れることも可能ですが、一般的には数値を利用した方がプログラムが書きやすく(比較しやすく)なります。 また、同じ理由でA,J,Q,K等の絵札は数値で1,11,12,13で表すことにしています。 マークは ♠=0,♣=1,♥=2,♦=3として表すことにすると、上記のプログラムで作成した配列cardsは、 ♠A ♣A ♥A ♦A ♠2 ♣2 ♥2 ♦2 ……… ♠K ♣K ♥K ♦K という配列を作成していることになります。 構造体の生成で new というキーワードを使うのは、本当はクラスだからです。 ここではあまり気にしない事にしましょう。とにかく構造体の実体を作っています。 次に、確かに上記のような配列が格納されているのか確認するための表示用プログラムを作りましょう。 表示用のプログラム(関数)の名前はdispCardにします。 function dispCard() { この中にプログラムを書く。 } 構造体の配列の内部は全て数値で扱っていますから表示用の配列を作っておきます。 var markimg = ["♠","♣","♥","♦"]; var numimg = ["","A","2","3","4","5","6","7","8","9","10","J","Q","K"]; それぞれ ♠ ♣ ♥ ♦ と A 2 3 4 5 6 7 8 9 10 J Q K という配列を表しています。 numimgの最初には空白を入れています。使用しないので無駄に感じるかもしれませんが、配列の添字と内容を合わせておくと分かりやすいのでダミーとして入れています。 こうすると、numimg[1]は"A"、numimg[2]は"2"を表すので間違いが発生しにくくなります。 出力用の文字列用変数を初期化しておきます。 var tempHtml = ""; さらに以下の構文でマークと数値を連結しながら追記していきます。カードの枚数は(13×マークの数)枚なので、13*4回繰り返しています。 for(i=0;i 13*4;i++) { tempHtml = tempHtml+ markimg[cards[i].mark] + " " + numimg[cards[i].num] +" "; } 次は「肥満度判定機」でも使った書き方です。 ループが完了したら BR タグで改行を追加してから、HTMLのdispという名前のdivタグの位置に出力しています。 tempHtml += " BR "; document.getElementById("disp").innerHTML = tempHtml; HTMLで作成したボタンは、start()という関数を呼び出すように書きました。start()関数を書きましょう。 function start() { initCard(); dispCard(); } これで、完成です。HTMLボタンを押して全てのカードが表示されるか確認してみましょう。 完成版のプログラムを以下に示します。 シャッフル 繰り返しと乱数を用いて、トランプのシャッフルをするプログラムを作ります。 基本的なアルゴリズムを図に示します。 基準を最初のカードから最後までずらしながら(繰り返し) 乱数で決めたカードの位置のカードを交換します。 常に交換でカードを混ぜていくので、プログラムミスによるカードの紛失が発生しないので私はこのアルゴリズムを良く使います。 もしも混ぜる回数が足りないのではないかと不安になるのであれば、一通り終わったあとに再度数回繰り返すと良いでしょう。 交換のアルゴリズムも定番で良く出てきます。 AとBを交換する場合、基本的には交換する2つ以外の領域wを一つ用意して W ← A (AをWに退避) A ← B (Aは既に退避したのでBをAに入れる) B ← W (Bは既に移動を終えたので、退避したAをBに戻す) この3ステップで交換完了です。 shuffleCard()という関数を作ります。 function shuffleCard() { この中にシャッフルのプログラムを書く } 繰り返しはカードの枚数なので、13*4枚分繰り返す。 for(i=0;i 13*4;i++) { この中に繰り返したい内容を書く } 交換相手となるカードを指定する乱数を発生します。 r = Math.floor(Math.random()*13*4); Math.random()は0〜1までの乱数値を発生します。その数に13*4を掛けて 0〜13*4 つまりカードの枚数分の乱数が発生します。 Math.floor()は切り捨てをします。計算機の時に使いましたね。 これで0〜13*4未満の整数値の乱数を取得することができます。 交換相手が決まれば、あとは交換します。 基準のカードは i 番目で、交換相手は r 番目の配列の内容を交換するには、 w = cards[i]; cards[i]=cards[r]; cards[r]=w; この3行で交換完了です。 ボタンを押した時のstart()関数でカードの初期化が終わった後にshuffleCard()の呼び出しを挿入して、カードが混ぜられたか確認してみましょう。 function start() { initCard(); shuffleCard(); dispCard(); } 完成版を以下に示します。 練習 initCard関数の内部ではさらに繰り返し(for)を使うことが出来る場所があります。繰り返しを使って同じ動作をするように書き換えてください。 dispCardではHTMLタグを使って表示する文字の色を変更することができます。 font color= red とするとその後が赤になります。その色を終了する場合は /font タグで閉じます。黒にする場合は font color= black です。♥と♦を赤文字で、♠と♣を黒文字で表示するように改良してください。ヒント 色の開始 font color はmarkimgの配列中で指定する。色の終わりの /font は共通なのでプログラム中で追加する。 実行結果
https://w.atwiki.jp/sevenlives/pages/2280.html
二分探索? 線形探索? 接尾辞配列? エイホ-コラシック法? アルファ・ベータ法? バックトラッキング法 ハッシュ・テーブル SEO ページ・ランク? パンダ・アップデート? Google Bing 検索
https://w.atwiki.jp/nanocoding/pages/50.html
シミュレーション http //visgraph.cs.ust.hk/MoXi/ 毛筆シミュレーション Iris http //tpot.jpn.ph/t-pot/program/70_iris_filter/index.html http //www.hirax.net/dekirukana5/bokeboke1/index.html 共食いキャラの本 「FFFTP」開発終了を作者が宣言 かわいい検索 ギャラクシー渡辺 wikipedia ストラウストラップのプログラミング入門 ビーバップ 真夜中ごろ セロニアスモンク 野川秀文 経路積分 showrss プラグインエラー RSSが見つからないか、接続エラーです。 showrss プラグインエラー RSSが見つからないか、接続エラーです。 showrss プラグインエラー RSSが見つからないか、接続エラーです。 #ref_list
https://w.atwiki.jp/zero_one/pages/5.html
https://w.atwiki.jp/mtym_toshiaki/pages/151.html
3BHRに貼っておくと忘れ去られそうだからこっちにも貼った
https://w.atwiki.jp/mhikichi/pages/24.html
このページではカードの並べ替えを行うアルゴリズムについて学びます 準備 HTMLとCSSを準備します。 トランプその3で作成したプログラムをForkしましょう。 HTML html body form name="form1" br INPUT TYPE="button" NAME="cmdCalc" value="開始" onclick="start()" /form div id="disp" /div form name="form2" INPUT TYPE="button" NAME="cmdGet" value="カードをもらう" onclick="getcard()" INPUT TYPE="button" NAME="cmdPut" value="カードを返す" onclick="putcard()" br どのマーク?(0 ♠,1 ♣, 2 ♥, 3 ♦) INPUT TYPE="text" NAME="txtA" br どの数字?(1~13) INPUT TYPE="text" NAME="txtB" br INPUT TYPE="button" NAME="cmdPut2" value="指定したカードを返す" onclick="putcard2()" INPUT TYPE="button" NAME="cmdSort1" value="並べ替え1" onclick="mycardsort1()" INPUT TYPE="button" NAME="cmdSort2" value="並べ替え2" onclick="mycardsort2()" /form div id="disp2" /div /body /html トランプその3で作成したHTMLにボタンをいくつか追加しています。 mycardsort1() 並び替え1ボタン用のプログラム mycardsort2() 並び替え2ボタン用のプログラム バブルソート まずはソート(並び替え)の基本中の基本であるバブルソートについて学びます。 常に隣同士を比較して、順番が逆だったら交換するという処理を繰り返します。 これで1周目完了です。 1周目が完了すると、右端には一番大きな数のカードがあるはずです。 続いて2周目です。2周目は、右端に既に確定したカードを除外して繰り返し回数が少なくなります。 残ったカードの中で一番大きな数のカードが右端にあります。ここまでで、大きい2枚のカードが確定しています。 続いて3周目も、既に確定したカードを除いて処理します。 残ったカードの中で一番大きな数のカードが右端にあります。ここまでで、大きい3枚のカードが確定しています。 続いて4周目も、既に確定したカードを除いて処理します。 残ったカードの中で一番大きな数のカードが右端にあります。ここまでで、大きい4枚のカードが確定しています。 続いて5周目も、既に確定したカードを除いて処理します。 5周目は、最後の2枚のカードなので、1回比較して終了です。 これで、全てのカードが並び変わっているはずです。 コーディング では、バブルソートのプログラムを完成させていきます。 HTMLのボタンかmycardsort1()という関数を呼び出すことになっていますから、その名前から始めます。 function mycardsort1() { //ここにプログラムを書く } 変数の宣言をしておきましょう。 var i,j,w; まずは1周目のプログラムを実装します。 隣同士を比較して、順番が逆順だったら交換です。 繰り返しの回数は、右隣まで比較することを考慮しカード枚数より一回少なく繰り返します。 for(j=0;j mycardcnt-1;j++) { if(mycards[j].num mycards[j+1].num) { w = mycards[j+1]; mycards[j+1]=mycards[j]; mycards[j]=w; } } 最後に表示関数を呼び出しましょう。 dispMyCard(); このプログラムの段階で、実行結果を確認しておきましょう。 並べ替えはまだ終了しませんが、右端には一番大きいカードがあれば正しいプログラムです。 ちなみにこの状態でも、たくさんボタンを押せばどんどんならび変わるはずです。 練習 このプログラムを改造して、バブルソートを完成させてみましょう。さらに変数iの繰り返しを追加します。繰り返しの初期値は0、終了はmycardcnt-1です。 内側のループはこのままでも並び変わりますが、より効率よく不必要な繰り返しをしないために内側の条件を変更します。最初はmycardcnt-1回、次はmycardcnt-2回、…、最後は何回繰り返すのが効率よいでしょうか。 挿入ソート 基本ソートの一種である挿入ソートを実装します。 挿入ソートの実装前に少し準備をしておきます。 HTML html body form name="form1" br INPUT TYPE="button" NAME="cmdCalc" value="開始" onclick="start()" /form div id="disp" /div form name="form2" INPUT TYPE="button" NAME="cmdGet" value="カードをもらう" onclick="getcard2()" INPUT TYPE="button" NAME="cmdPut" value="カードを返す" onclick="putcard()" br どのマーク?(0 ♠,1 ♣, 2 ♥, 3 ♦) INPUT TYPE="text" NAME="txtA" br どの数字?(1~13) INPUT TYPE="text" NAME="txtB" br INPUT TYPE="button" NAME="cmdPut2" value="指定したカードを返す" onclick="putcard2()" INPUT TYPE="button" NAME="cmdSort1" value="並べ替え1" onclick="mycardsort1()" INPUT TYPE="button" NAME="cmdSort2" value="並べ替え2" onclick="mycardsort2()" /form div id="disp2" /div /body /html 一部だけ変更します。カードをもらう処理を少し変更しますので、HTMLでgetcard()→getcard2()とします。 続いてgetcard2()を完成させます。 これまで使って来たgetcard()は自分のカードの先頭に入れていましたが、自分のカードの最後に追加するように変更します。 function getcard2() { var c; var i; if( cardcnt 0 ) { c = cards[0]; for(i=0;i cardcnt;i++) { cards[i]=cards[i+1]; } cardcnt--; // ↑ここまでは、変更無し。 // ↓ここから自分のカードに追加 mycards[mycardcnt]=c; mycardcnt++; // ↑変更ここまで dispCard(); dispMyCard(); } } ここまでで動作確認しておきましょう。 手札を貰った時に、最後に追加されるようになれば準備完了です。 挿入のアルゴリズム 既に順番に並んでいるところへ、適当な場所へ挿入するためのアルゴリズムです。 挿入ソートに進むための基本です。 後ろから順に自分が入るべき位置を探します。 判断基準は、自分のカードより大きければまだ前へ、自分のカードより大きなカードを見つけてその場所へ移動します。 HTMLのボタンからmycardsort2()という関数を呼び出すことになっていますから、その名前から始めます。 function mycardsort2() { //ここにプログラムを書く } 変数の宣言をしておきましょう。 var i,j,w; 一番後ろのカード(mycardcntが枚数なので、最後の番号はmycardcnt-1)を退避しておきます。 w = mycards[mycardcnt-1]; 退避したカードのさらに1枚前から開始して、w.num が小さい間一枚ずつずらします。 また、最後まで見つからない場合もあるので j =0 で繰り返せる条件を追加します。 for(j=mycardcnt-2;j =0 mycards[j].num w.num ;j--) { mycards[j+1]=mycards[j]; } 最後に、退避してあったカードを空いた場所へ格納します。 mycards[j+1]=w; 最後に表示関数を呼び出しましょう。 dispMyCard(); ここまでのプログラムです。 動作確認して挿入の動きを確認しておきましょう。 2枚カードをもらう 挿入する 1枚カードをもらう 挿入する の3,4を繰り返すだけでも、並べ替えが完了することも確認しましょう。 挿入ソートへ拡張 まずは2枚で挿入して順番通りにする。 続いてその2枚に後ろの1枚を挿入して3枚が順番通りになる。 さらに続いて3枚に後ろの1枚を挿入して4枚が順番通りになる。 これをカードが有る限り続けると、全て並び変わることになります。 練習 このプログラムを改造して、挿入ソートを完成させてみましょう。外側のループは1からmycardcntより小さい間繰り返します。 内側のループのどこに外側のループの変数を反映させるかがポイントです。退避するカードと最初のjの値をどう表すかを考えましょう。
https://w.atwiki.jp/mhikichi/pages/22.html
トランプを使って基本アルゴリズムを学びましょう。 探索プログラムの最も基本的なアルゴリズムである線形探索を実装します。 準備 HTMLとCSSを準備します。 トランプで作成したプログラムからForkするのが簡単です。 HTMLとCSSを準備します。 これまで作ってきたプログラムをForkしても良いですし、一から作成しても良いでしょう。 このページで作成するプログラムで共通で使用します。 HTML html body form name="form1" br INPUT TYPE="button" NAME="cmdCalc" value="開始" onclick="start()" /form div id="disp" /div form name="form2" どのマーク?(0 ♠,1 ♣, 2 ♥, 3 ♦) INPUT TYPE="text" NAME="txtA" br どの数字?(1~13) INPUT TYPE="text" NAME="txtB" br INPUT TYPE="button" NAME="cmdSrc" value="検索" onclick="search()" INPUT TYPE="button" NAME="cmdSrc2" value="検索2" onclick="search2()" /form div id="disp2" /div /body /html いくつかボタンが用意されていて、onclickで start() search() search2() それぞれが起動できるようになっています。 divタグを書いて出力用の領域を置いてます。 dispという名前の領域とdisp2という名前の領域2つ作ります。 CSS body { background-color #DDDDDD; font 30px sans-serif; } 前回と同じです。Forkしたなら変更不要です。 線形探索 線形探索とは、前から順番に総当たりで探す単純なアルゴリズムです。 ランダムに並んでいるものから探すにはこの方法しかありません。 検索ボタンを押した時に動作する search() 関数を作ります。 function search() { この中にプログラムを書く } 他のプログラムと同様に、テキストボックスから値を取り出します。今回は数値として扱うのでparceIntで整数値に変換しています。 var a=parseInt(document.form2.txtA.value); var b=parseInt(document.form2.txtB.value); この変数は、出力領域の一時保存場所として使います。最初は空文字列を入れておきます。 var tmpHtml=""; while命令は繰り返しの命令です。forでも書けますが、この形も良く使うので覚えておきましょう。 条件はカードのi番目の数字がb(後ろのテキストボックスの値)と等しく無い間です。 意味付けすると、「カードがまだ見つかっていない間」を表しています。 var i=0; while(cards[i].num!=b) { i++; } tmpHtml += を使って、変数の内容を追加しています。=だけを使うと内容を書き換えるので、前の行で設定した物が残らなくなります。ここでは見つかった時のiを表示して何番目に見つかったかを表示しています。配列の添字は0から始まっているので、先頭は0番目として表示します。さらに、その時のマークの値を表示しています。 最後にその結果をdisp2の領域に出力しています。 tmpHtml += "探しているカードは"+i+"番目に見つかりました br "; tmpHtml += "マークは"+cards[i].mark+"です"; document.getElementById("disp2").innerHTML = tmpHtml; ここまでの完成板は以下のプログラムです。 このままでは一つ不具合があるはずです。 入力した値がトランプに無い値の場合は、検索できません。実際動作させてみると何も表示されませんが、存在しない配列の場所を探すので不具合で異常終了しています。 見つからない場合には、その情報を表示するように改良します。 基本的な考え方は以下の図です。 線形探索では最後のカードを探した後にさらに次のカードを探そうとします。 そこにはカードが無いため、探さずに終了します。 結局、カードが見つかった場合はその場所を示していますが、見つからなかった場合はカードが無い場所を示す事になります。 これを判定することで、見つからなかった事を知る事ができます。 実際のコードを書いてみます。 while(i 13*4 cards[i].num!=b) { i++; } カードがまだ見つかっていない事とまだカードがある事の2つを判定します。 どちらかでも満たさない場合は終了しなければいけません。繰り返す条件は両方満たしている場合ですから という記号を使います。どちらかだけ満たしたいという条件を書く場合は||を使います。 実は順番も重要です。 もうカードが無い場合はカードを見てはいけませんから、まだカードがある事の条件を先に書かなければなりません。 見つかった場合と見つからなかった場合で処理を分けます。 if(i 13*4) { tmpHtml += "探しているカードは"+i+"番目に見つかりました br "; tmpHtml += "マークは"+cards[i].mark+"です"; } else { tmpHtml += "そんなカードはありません。"; } i 13*4 は最終的なiの値がカードの範囲内かどうかを判定しています。13*4枚より少ないという判定ですから、これは見つかった場合を表しています。それ以外は見つからなかった場合ですから処理を分岐しています。 練習 検索する様子を随時表示するようにプログラムを追加してみよう。whileループ内でtmpHtmlに情報を追記してください。 数値とマークが両方合うカードを検索するように追加してみよう。search2()関数を作って、検索2ボタンから動かしてください。条件が少し複雑です。数値とマーク両方一致している場合は終了しますが、繰り返し条件はその逆です。逆を表す記号は!です。!(条件式)のようにすると()の中の条件の逆で成り立つ式を記述することができます。 途中結果を表示する実行例
https://w.atwiki.jp/patent69/pages/7.html
裏DVD・無修正DVDの販売情報 に基づいて行われる、請求項10又は12に記載の装置。 【請求項14】 前記ライトフィールド画像の前記一つ又は複数の深度レベルに関する深度マップを決定することを少なくとも部分的に行うようにされる、請求項10に記載の装置。 【請求項15】 前記一つ又は複数のレジストレーション・マトリクスは、RANSACアルゴリズムによって決定される、請求項10から12のいずれかに記載の装置。 【請求項16】 前記ある画像及び前記一つ又は複数の残りの画像の超解像化を行うことために、不等間隔補間法を少なくとも部分的に実行するようにされる、請求項10又は12に記載の装置。 【請求項17】 前記ある画像及び前記一つ又は複数の残りの画像の超解像化を行うことために、逆投影法を少なくとも部分的に実行するようにされる、請求項10又は12に記載の装置。 【請求項18】 前記超解像画像は前記ある画像よりも高い解像度を有する、請求項10から17のいずれかに記載の装置。 【請求項19】 電子機器として構成される請求項10に記載の装置であって: 前記電子機器の少なくとも一つの機能をディスプレイを通じてユーザが制御することを容易にするように、かつユーザ入力に応答するように構成される、ユーザインタフェース回路およびユーザインタフェースソフトウェアと; 前記電子機器のユーザインタフェースの少なくとも一部を表示するよう構成される表示回路と;を備え、前記ディスプレイ及び前記表示回路は、上記電子機器の少なくとも一つの機能をユーザが制御することを支援するように構成される、装置。 【請求項20】 前記ライトフィールド画像をキャプチャするように構成される少なくとも一つのイメージセンサを備える、請求項19に記載の装置。 【請求項21】 前記電子機器が携帯電話として構成される、請求項19に記載の装置。 【請求項22】 少なくとも一つのコンピュータ読み取り可能な記憶媒体を備えるコンピュータプログラム製品であって、前記コンピュータ読み取り可能な記憶媒体が、一つ又は複数のプロセッサにより実行される時に、装置に少なくとも: ライトフィールド画像の受け取りを支援することと; 前記ライトフィールド画像の一つ又は複数の深度レベルを決定することと; 前記ライトフィールド画像から複数の画像を生成することと; 前記複数の画像のある画像と一つ又は複数の残りの画像との間の一つ又は複数の深度レベルに対応して一つ又は複数のレジストレーション・マトリクスを決定することと; 前記ある画像の超解像画像を生成すべく、前記一つ又は複数のレジストレーション・マトリクスに基づいて、前記ある画像及び前記一つ又は複数の残りの画像の超解像化を行うことと; を実行させる命令セットを備える、コンピュータプログラム製品。 【請求項23】 前記ある画像と、前記一つ又は複数の残りの画像のうちのいずれかとの間の一つ又は複数の深度レベルのいずれかに対応して、前記一つ又は複数のレジストレーション・マトリクスのいずれかを決定することのために、前記装置が少なくとも部分的に: 前記ある画像中から前記深度レベルに関連する領域を選択すると共に、前記一つ又は複数の残りの画像の前記いずれかからも、該深度レベルに関連する領域を選択することと; 前記ある画像中の前記選択された領域内で複数の特徴点を決定すると共に、前記一つ又は複数の残りの画像の前記いずれかからも、前記選択された領域内で複数の特徴点を決定することと; 前記ある画像中の前記選択された領域内の前記複数の特徴点と、前記一つ又は複数の残りの画像の前記いずれかの前記選択された領域内の前記複数の特徴点との一致度に基づいて、前記レジストレーション・マトリクスを計算することと; を行うようにされる、請求項22記載のコンピュータプログラム製品。 【請求項24】 前記ある画像の超解像化を行うために、該装置が少なくとも部分的に: 前記ある画像の一つ又は複数の深度レベルに関する領域及び前記一つ又は複数の残りの画像の前記一つ又は複数の深度レベルに関する領域の超解像化を、前記一つ又は複数の深度レベルに対応する前記レジストレーション・マトリクスに基づいて行うことと; 前記ある画像の前記一つ又は複数の深度レベルに関する前記領域の超解像化を前記一つ又は複数の残りの画像の対応する領域と共に行うことに基づいて、前記超解像画像を生成することと; を行うようにされる、請求項22又は23に記載のコンピュータプログラム製品。 【請求項25】 前記超解像化はSR再構成アルゴリズムに基づいて行われる、請求項22又は24に記載のコンピュータプログラム製品。 【請求項26】 前記装置が、前記ライトフィールド画像の前記一つ又は複数の深度レベルに関する深度マップを決定することを少なくとも部分的に行うようにされる、請求項22に記載のコンピュータプログラム製品。 【請求項27】 前記一つ又は複数のレジストレーション・マトリクスは、RANSACアルゴリズムによって決定される、請求項22から24のいずれかに記載のコンピュータプログラム製品。 【請求項28】 前記ある画像及び前記一つ又は複数の残りの画像の超解像化を行うことために、前記装置が不等間隔補間法を少なくとも部分的に実行するようにされる、請求項22又は24に記載のコンピュータプログラム製品。 【請求項29】 前記ある画像及び前記一つ又は複数の残りの画像の超解像化を行うことために、前記装置が逆投影法を少なくとも部分的に実行するようにされる、請求項22又は24に記載のコンピュータプログラム製品。 【請求項30】 前記超解像画像は前記ある画像よりも高い解像度を有する、請求項22から29のいずれかに記載のコンピュータプログラム製品。 【請求項31】 ライトフィールド画像の受け取りを支援する手段と; 前記ライトフィールド画像の一つ又は複数の深度レベルを決定する手段と; 前記ライトフィールド画像から複数の画像を生成する手段と; 前記複数の画像のある画像と一つ又は複数の残りの画像との間の一つ又は複数の深度レベルに対応して一つ又は複数のレジストレーション・マトリクスを決定する手段と; 前記ある画像の超解像画像を生成すべく、前記一つ又は複数のレジストレーション・マトリクスに基づいて、前記ある画像及び前記一つ又は複数の残りの画像の超解像化を行う手段と; を備える装置。 【請求項32】 前記ある画像と、前記一つ又は複数の残りの画像のうちのいずれかとの間の一つ又は複数の深度レベルのいずれかに対応して、前記一つ又は複数のレジストレーション・マトリクスのいずれかを決定する手段は: 前記ある画像中から前記深度レベルに関連する領域を選択すると共に、前記一つ又は複数の残りの画像の前記いずれかからも、該深度レベルに関連する領域を選択する手段と; 前記ある画像中の前記選択された領域内で複数の特徴点を決定すると共に、前記一つ又は複数の残りの画像の前記いずれかからも、前記選択された領域内で複数の特徴点を決定する手段と; 前記ある画像中の前記選択された領域内の前記複数の特徴点と、前記一つ又は複数の残りの画像の前記いずれかの前記選択された領域内の前記複数の特徴点との一致度に基づいて、前記レジストレーション・マトリクスを計算する手段と; を備える、請求項31に記載の装置。 【請求項33】 前記ある画像の超解像化を行う手段は: 前記ある画像の一つ又は複数の深度レベルに関する領域及び前記一つ又は複数の残りの画像の前記一つ又は複数の深度レベルに関する領域の超解像化を、前記一つ又は複数の深度レベルに対応する前記レジストレーション・マトリクスに基づいて行う手段と; 前記ある画像の前記一つ又は複数の深度レベルに関する前記領域の超解像化を前記一つ又は複数の残りの画像の対応する領域と共に行うことに基づいて、前記超解像画像を生成する手段と; を有する、請求項31又は32に記載の装置。 【請求項34】 前記超解像化はSR再構成アルゴリズムに基づいて行われる、請求項31又は33に記載の装置。 【請求項35】 前記ライトフィールド画像の前記一つ又は複数の深度レベルに関する深度マップを決定する手段を備える、請求項31に記載の装置。 【請求項36】 前記一つ又は複数のレジストレーション・マトリクスは、RANSACアルゴリズムによって決定される、請求項31から33のいずれかに記載の装置。 【請求項37】 前記ある画像及び前記一つ又は複数の残りの画像の超解像化を行うことは、不等間隔補間法を実行することを含む、請求項31又は33に記載の装置。 【請求項38】 前記ある画像及び前記一つ又は複数の残りの画像の超解像化を行うことは、逆投影法を実行することを含む、請求項31又は33に記載の装置。 【請求項39】 前記超解像画像は前記ある画像よりも高い解像度を有する、請求項31から38のいずれかに記載の装置。 【請求項40】 装置により実行されると該装置に ライトフィールド画像の受け取りを支援することと; 前記ライトフィールド画像の一つ又は複数の深度レベルを決定することと; 前記ライトフィールド画像から複数の画像を生成することと; 前記複数の画像のある画像と一つ又は複数の残りの画像との間の一つ又は複数の深度レベルに対応して一つ又は複数のレジストレーション・マトリクスを決定することと; 前記ある画像の超解像画像を生成すべく、前記一つ又は複数のレジストレーション・マトリクスに基づいて、前記ある画像及び前記一つ又は複数の残りの画像の超解像化を行うことと; を実行させるように構成される、コンピュータプログラム。 【請求項41】 添付図面を参照して実質的に本明細書に記載される装置。 【請求項42】 添付図面を参照して実質的に本明細書に記載される方法。 裏DVD・無修正DVDの販売情報
https://w.atwiki.jp/order/pages/23.html
このページは、第一章対応です。 初心者は、参考にしていただくと幸いです 1.エリア選択 ~おすすめエリア~ 水色の伝説の剣を所持と書いてあるエリアを 選択して下さい。 始まると即、情報→倉庫から、伝説の武器を売ろう。 国の予算が30万s超えます。 2.軍事 ~コレヒドール~ 人をいじる→部下→配属で、 全員王直属部隊に入れよう。 政治→軍事から、 本拠地より1つ東の領・コレヒドールに1人派兵しよう。 コレヒドールが領に入るぞ。 3.内政 ~兵装を増やそう~ 今度は、政治→内政→施設から、 自分の領の、城がある所を選択、 アガリの初期施設は、 ・学問所 ・農場×3 である。空白に、ありったけ兵器工房を建てよう。 また、同じ方法でコレヒドールに 士官学校をありったけ建てよう。 4.外交 ~魔王様~ 政治→外交を決定すると、黒い文字が表示する。 そこが魔王軍だ。 使者を送るを選択して、 挨拶して退場するを繰り返すと、 友好度が1人に付き1ずつ上がっていく。 30になると、5に移動しよう。 5.外交 ~モンスター兵の輸入~ ここから本格的に軍事系に突入する。 お城の事→お城拡張した後、 外交で、魔王国に使者を送ろう。 魔王にお願いをして、魔物を貸してもらおう。 モンスター兵が50%をしめると、 モンスター兵を軍部にしばらく移そう。 6.合併のコツ まだ、攻め込むにしては、危険である。 一番南東の国に、二人使者を送ろう。 1人は、挨拶役、もう1人は、合併申請役と分担しよう。 (なお、先に挨拶しないと申請が通らないので注意。) →申請に成功する、残りの国2国(自国抜)になると8番 →失敗すると7番 7.外交 ~攻め込めぇ!!!!~ 合併に失敗すると友好度-99となる。 厄介なので魔王に頼んで本拠地に攻め込んでもらおう。 諜報で、破壊工作をするなどして援護しよう。 8.内政 ~更に兵装追加~ 所得1000s以下のエリアに魔術研究所をありったけ建てよう。(なるべく武器攻防も) 不死兵追加まで次のステップに進まず、6番を繰り返そう。 ※魔法暴走が起きた地域の税率は0%にしよう。勇者による解決はほぼ不可能。 9.軍事 ~超指導~ 一人ずつ丁寧に次の通りにして下さい。 状態 対処法 兵装 歩兵 不死兵に兵装変更 兵数 未上限 兵を集める 全て満たす 兵を訓練 ステータス低 解雇→新規登用 (解雇は全体20より下また、3人残そう) (登用は全体的に40辺りが的面) 10.軍事 ~試験~ ※よい子の人は、ここで必ずセーブしようね。お気に入りの人がやられるとすぐリセットしよう。 魔王国以外の国で、一番規模が小さい国に攻め込んでみよう! まずルールを教えよう。 第一条.いきなり城に攻め込むな。(自滅したい場合を除き) 第二条.攻め込みたいメンバーを攻めるエリアに隣接するエリアに集合させよう。それで機動力関係なく集団戦に打ち込める。 第三条.集団戦で、一点集中攻撃を行おう。分散はタブー 11.いよいよ魔王国潜入?...not! そろそろ戦闘に慣れてきただろう。 しかし、まだ魔王国にいどむ前にやるべき事がある。 それは、魔王と自分の国の一対一になることだ。 どんどん合併していき、魔王国だけにしよう。 コツは、6番を参照。 あと、残った部下は、勇者を呼ばせて、国の問題を解決させよう。反乱(3000s)を重点的に解決させていこう。 12.戦争 ~敵戦力削戦~ 明日公開 王だぁ交流スレッド喫茶 茶柱
https://w.atwiki.jp/sigetch_2007/pages/22.html
Mixbrushのアルゴリズム比較 Mixbrushのアルゴリズムに付いてのメモ書きです。 基本コンセプト Mixbrushを実現するときのコンセプトは、SAIとNekoPaintのパラメータを参照して、 地の色が描画色に混色する (canvas_color_rate=bleed) 地の色が混ざり過ぎないように、描画色に前景色が少しずつ混ざる (original_color_rate=resat) 混ざり具合がタブレットの圧力に追随する(*_pressure_rate) の3つにしました。 初期実装(071008+計算誤差修正版) 問題点1:混色の方法 最初の実装での大きな問題は、描画色に何を混色するかです。 これにもいろんなオプションが考えられます。例えば、描画色にはキャンバスの色だけ混色して、実際に描画するときに一定の割合で前景色を足す 方法があります。この方法では、描画色の混色には前景色を使いません。(間接的に、次回のキャンバス色には入るのでしょうが...) Webの資料を読む限り、Painterなどはこの方法じゃないかと思っています。(本当かどうかはまったくわかりませんけど。) 2つめの方法としては、描画色に前景色とキャンバスの色を足し込んで、その色をキャンバスに置くという方法があります。 そのほかにも、本当にいろいろな混ぜかたがあると思います。そして、その方法ごとに地の色の強さや、混ざり具合の特性が大きく変わってくるはずです。 ここでは「とりあえず」ということで2番目の方法を選択します。 問題点2:パラメータの指定方法 次の問題は"地の色"と"前景色"と"元の描画色"の割合をどう指定するか、という点にあります。 3つの色データのソースがあるので、単純に考えると"地の色割合"、"前景色割合"、"元の描画色割合(=1 - 地の色 - 前景色)" として、合計が1になるように制限してあげることです。 しかし、合計が1になるというパラメータはユーザにとって設定しづらいという問題があります。 もうひとつの方法として、"地の色の割合"と"前景色割合"の間に関係式を作っておき、一定の法則にしたがって値が決定するという方法です。 この方法では、ユーザが指定した値から、適当に本当の値が決まりますが、パラメータの影響が直感的でなくなるという欠点があります。 ここでは、実装の手間を考えて、後者にしています。パラメータとしては、 本当の前景色割合 = (1 - 地の色の割合) × 前景色割合 という式を使っています。つまり、前景色割合は完全に地の色の割合に負けてしまうパラメータというわけです。 本当はもっと凝った方法もあると思います。例えば、 本当の前景色割合 = 前景色割合 / MAX(1.0 , 前景色割合 + キャンバス色割合) 本当のキャンバス色割合 = キャンバス色割合 / MAX(1.0, 前景色割合 + キャンバス色割合) 元の描画色割合 = 1 - 本当の前景色割合 - 本当のキャンバス色割合 などとする方法があります。お互いに"1.0"に対する割合としておき、合計が1.0を越えてしまったら(=出力がサチったら)、その割合で按分する方法です。かなりフェアな方式と言えます。 そんなこんなで、071008+計算誤差修正版の場合の混色フローはこんな感じです。 やまかわさんの実装 やまかわさんの実装では、Bleedというパラメータが追加されました。このときの混色フローはこんな感じです。 delayステップだけ点を打つのを遅らせて、まだ色が塗られる前の描画色をピックアップするようにしています。 感じとしては、delayステップ前までのストロークは乾ききっていないので地の色に定着しない状態で、それ以前のストロークは乾いて 地の色に定着するイメージです。(071008版では、すぐに乾いてしまうイメージです。描画色が強いと、地の色があまり混ざりません。) すごく表現の幅がひろがって役立つすばらしい実装ですが、Bleedパラメータが非常にわかりづらい位置付けになってしまっているように見えました。 パラメータの強さがcanvas_color_rate Bleed original_color_rateとなり、original_color_rateが2つのパラメータに左右されるように なってしまったことと、Bleedの0-1.0という(絶対値の)範囲が意味する内容がわかりづらくなってしまっていることが問題だと感じました。 そこで、実装はほとんどそのままいただいて、計算順序を変更するようにしました。 071029版(仮) 現在使用している実装です。混色フローを単純化しました。 地の色として、現在のキャンバス色とdelayステップ前のキャンバス色を混ぜるようにしました。混ぜる割合をdelayed_color_rateで決定するようにしました。 パラメータの強さは canvas_color_rate delayed_color_rate canvas_color_rate original_color_rate となっていますが、delayed_color_rateとoriginal_color_rateがそれぞれ影響をしなくなったので、調整が楽になっています。 そして、地の色の調整(Painterでいうところのbleed)はcanvas_color_rateで一本化したので、delayed_color_rateの役割と調整が簡単になりました。 誤差の扱い 071008版では内部の計算は原則としてgucharで行っていました。計算をする度に桁落ちが発生してしまうという欠点がありました。 そこで、1029版(仮)からはブラシの色としてGimpRGBを使って内部計算を行うようにしました。 レイヤーの扱い 混色する場合に、地の色が混ざってくるので、白いキャンバスの上では色が白く(薄く)なっていく効果があります。 ところが、レイヤーでは背景の色がない(不透明度 1.0)ので、混ぜるという方式がうまくできません。 透明な部分にはなんらかの色が隠れているように仮定する"Hidden Color"の方式で色を補完してあげると計算できるようになりますが、 透明なレイヤーに線を引いたのに、突然白(や背景色)が混ざってくるという動作になってしまいます。 できれば透明度を保護しつつ色を塗りたいという考えになります。 そこで、レイヤー(不透明度 1.0)の場合は、以下の方法でcanvas_color_rateと不透明度を調節します。 旧brushのcolor_rate = 1 - 旧canvas_color_rate 新canvas_color_rate = 旧canvas_color_rate × レイヤ不透明度 新brushのcolor_rate = 1 - 新canvas_color_rate 新不透明度 = 旧不透明度 × 旧brushのcolor_rate / 新brushのcolor_rate このようにすると、混色のロジックとしては新canvas_color_rateを使用するようになるので、透明なキャンバス色はあまり色計算に反映されなくなります。 一方、実際に表示されるときの色の割合は、色×不透明度なので、 ブラシ色の割合 = 新brushのcolor_rate × 新不透明度 = 新brushのcolor_rate × (旧不透明度 × 旧brushのcolor_rate / 新brushのcolor_rate) = 旧不透明度 × 旧brushのcolor_rate canvas色の割合 = 新canvas_color_rate × 新不透明度 = (旧canvas_color_rate × レイヤ不透明度) × (旧不透明度 × 旧brushのcolor_rate / 新brushのcolor_rate) = (旧canvas_color_rate × (1 - 旧canvas_color_rate) × レイヤ不透明度 * 旧不透明度) / (1 - 旧canvas_color_rate * レイヤ不透明度) ※a = レイヤ不透明度 * 旧canvas_color_rate と置くと = (旧canvas_color_rate × 旧不透明度) × ((レイヤ不透明度 - a) / (1 - a)) となります。 ブラシ色の割合は、地の色がある場合と同じ割合(旧不透明度×旧brushのcolor_rate)になります。一方、canvas色の割合は (レイヤ不透明度 - a) (1 -a)なので、地の色がある場合(旧canvas_color_rate × 旧不透明度)よりも薄くなっていきます。 ブラシの割合が同じ一方で、canvas色の割合が弱くなるということは、結果的に、白(もしくは地の色)が混ざったように見えます。 ただし、この方法では透明度は薄くなりますが、色には白が混ざってこないので、やはり地の色があるキャンバスとは結果が変わります。 ついでに、"Hidden Color"として背景色か白を選んだ場合は、不透明度が1.0になるので、旧canvas_color_rateと新canvas_color_rateが変わりません。 なので、まったくなんの効果もあたえないということになり、この式が悪さをすることはありません。 名前 コメント