ねこでじ(Nekodigi)

Nekodigi’s diary

学習中の気づきをまとめています。応援よろしくお願いします

【Processing】Floyd-Steinberg Ditheringを使う

成果物

f:id:Nekodigi:20200109001023p:plain

単純に近い色を当てはめていく方法を少し書き換えるだけで可能なので、速度が圧倒的に速く、1ピクセルを4マスで表す方法にも劣らないほどリアルな色が再現できています。

仕組み

単純に近い色を当てはめていくのですが、元画像の色と、当てはめた色の誤差分だけ、隣のこれから参照するマスの元画像の色を変更していきます。次のマスでは、この誤差を受け取った元画像の色をもとに近い色を当てはめていくので、近い色を当てはめつつ、誤差(見た目の違和感)を減らすことができます。

左が画像、真ん中が誤差、右が出力結果です。今回はMinecraftの羊毛の16色で表したので、黄色の誤差が多かったみたいです。しかし、きちんと処理されて、出力結果は特徴をつかんでいます。

f:id:Nekodigi:20200103091249p:plain

作り方・コード

※追記 PVectorを用いて、コードを大幅に削減したうえ、任意の色を用いることができるようにしました。Floyd Stainberg Dithering Improvedという名前で追加しています。

github.com

今回は、こちらのCodingTrainを参考にしました。そちらをもとに、指定した色の中から選択するプログラムと、誤差を表示するプログラムを追加しました。

CodingTrainはこちらです。

www.youtube.com

今回のアルゴリズムは、前作ったドット絵ジェネレーターにぴったりだと思ったので、組み込んでおきました。色を補完する他のアルゴリズムも見ることができるので、使ってみてください。

nekodigi.hatenablog.com