web-dev-qa-db-ja.com

ASCIIアートイメージ変換アルゴリズムはどのように機能しますか?

このようなニースの無料の「image to ASCII art」変換サイト: ASCII-art.org

このような画像変換アルゴリズムはどのように機能しますか?

、
。 W、
 W W @ 
 W、W W 
、W、:W * .W 
#WW @WW WW#
 W WW.WWW WW:W 
 W. WW * WWW#WW @ W 
 *:WW.WWWWWWW @ WWW @ W#
 + *#WW#WWWWWWWWWWWWW#W 
 W#@WWWWWWWWWWWWWWWWWWW W 
 WW WWWWWWWWWWWWWWWWWW W 
 WW WWWWWWWWWWWWWWWWWWWW#
、WW .WWWWWWWWWWWWWWWWWWWWW 
 WW @ WWWWWWWWWWWWWWWWWWWWW 
:WWWWWWWWWWWWWWWWWWWWWWWWWW:
 @ WWWWWWWW @ WWWWWWW @@ WWWWWW。 
 W * WWWWWW :::: @ WWW :::::#WWWWW 
 WWWWWW @ :::+ * :. :: @ WWWW 
 WWWWW @:*:。::。、。:。:WWWW 
 @WWWW#:。:::。 。::#:@ WWW 
:WWW @:# :::WWWW:@WWWW 
 WWW#*:W @ * @ W。 W:#WWW 
 #WWWW:@ :: :: * WWWW 
 W @ WW * W。::、。::::、:+ @@ WW#、
 WWWW ## ,。:。:::。:。 .WWW :, 
 @ WWW @:W .. :::::#。 :WWWW 
 WWWW :: * ..:。 ::。、。 :WWWW 
 WWWW :::。:。::::、@ WW @ 
 WWWW:。:、:,:WW、
。:#:、:* 
 W +。、:::。、:@ 
 W ::。:W 
 @ , W :. 、、 :: * @ * :、。 :@W。, @ 
 + ..... *:::。#WWWWW::。#:.... +、
 @ ... ::: *: 、、::WWWWWWW、、* :::: ..、#
:... :::::: W:、@ W :::: * W。 :W ::::: ...#
 @@@@@@@@@@@ W @@@@@ W @@@@@@ W @@@@ W @@@ @@@@@@@:
 
55
splattne

全体像レベルの概念は単純です。

  1. 各印刷可能文字には、おおよそのグレースケール値を割り当てることができます。 「アット」記号@明らかに「プラス」記号より視覚的に暗い+、 例えば。実際に使用されるフォントと間隔に応じて、効果は異なります。

  2. 選択したフォントの比率に基づいて、入力画像を幅と高さが一定の長方形のピクセルブロックにグループ化します(たとえば、幅4ピクセル、高さ5ピクセルの長方形)。そのような各ブロックは、出力では1文字になります。 (上記のピクセルブロックを使用すると、240w-x-320hの画像は60文字の64行になります。)

  3. 各ピクセルブロックの平均グレースケール値を計算します。

  4. 各ピクセルブロックについて、(ステップ1からの)グレースケール値が(ステップ3からの)ピクセルブロック平均の適切な近似である文字を選択します。

これが最も簡単な演習形式です。より洗練されたバージョンでは、ピクセルブロックの候補間の関係を壊すときに、実際の文字のshapesも考慮されます。たとえば、「スラッシュ」(/)は、「バックスラッシュ」(\)左下から右上へのコントラスト機能があるように見えるピクセルブロックの場合。

94
joel.neely

aalib (2001年の最後のリリース)はオープンソースですASCII mplayerなどのアプリケーションで使用されるアートライブラリです。ソースコードを確認して、その方法を確認してくださいそれ以外、 このページ は、そのようなアルゴリズムがどのように機能するかについて詳しく説明しています。

16
codelogic

また、 libcaca (最新リリース2014)をご覧ください。このWebサイトでは、aalibに対して以下の改善が行われています。

  • Unicodeサポート
  • 2048色(一部のデバイスは16色しか処理できない)
  • カラー画像のディザリング
  • 高度なテキストキャンバス操作(ブリット、回転)
12
daniels

私はこれを見つけました ダニエル・フィッシャーによって書かれたCodeProjectの記事 単純なC#実装を含む画像からASCIIアートへの変換アルゴリズム。

プログラム/ライブラリが実行する手順は次のとおりです。

  1. イメージストリームをビットマップオブジェクトに読み込む
  2. Graphicsオブジェクトを使用してビットマップをグレースケールする
  3. 画像のピクセルをループします(ピクセルごとに1つのASCII文字が必要ないため、10 x 5ごとに1つ使用します)
  4. すべてのピクセルが結果のASCII charに影響を与えるように、それらをループし、現在の10 x 5ブロックの量の明るさを計算します。
  5. 最後に、計算された量に基づいて、現在のブロックに基づいて異なるASCII文字を追加します。

とても簡単ですね。

ところで:記事へのコメントで私はこれを見つけましたcool AJAX implementationGaia Ajax ASCII Art Generator =:

[...]標準化された一連のWebテクノロジーで簡単に実行できることを実証せざるを得ないと感じました。使用するライブラリを見つけることができるかどうかを確認しようとして、Sau Fan LeeのASCII fying .NETライブラリに関するcodeprojectの記事を見つけました。

追伸:ルーカス(コメントを参照)は別の CodeProjectの記事 を見つけました。

7
splattne