LoginSignup
0
0

More than 1 year has passed since last update.

モアレグラフィ

Last updated at Posted at 2022-12-21

注意

  • アドベントカレンダーで初めて記事を書きます.
  • 日本が変 or 解説が間違っている場合があります.
  • ご意見いただけますと幸いです.

本稿を記述する目的

  1. 読者にモアレグラフィについて理解していただく.
  2. 記事を通してアウトプットすることで,自身の理解を深める.
  3. アドベントカレンダーに参加する

執筆経緯

モアレグラフィ生成プログラムを作成し,コンテストに応募しました.
その時得られた考え等を共有したいと思います.

モアレグラフィとは

まず,モアレについて説明します.
モアレとは,縞模様と縞模様が重なったときに現れる縞(モアレ縞)のことを指します.
モアレ縞の例を示します.横縞と横縞の画像を重ねた時に,中心部に6本ほど縦縞があると思います.これがモアレ縞です.
moire.PNG
図 モアレの例

このモアレに画像を埋め込み,アートとして楽しもうというものがモアレグラフィというものです.
モアレグラフィには,基準となる格子,変形した格子の2種類が必要になります.
基準格子は,白黒を繰り返した格子です.
変形格子は,埋め込む画像の輝度から,基準格子を変形させたものです.
変形した格子に基準となる格子を重ねると埋め込まれた画像が現れます.

モアレのコントロール方法

モアレは,格子と格子の位相差で任意でコントロールすることができます.
格子そのものにも位相を持っているため,例えば,基準格子の1点の画像の位相に位相差を加えることで,任意形状のモアレを生成することができます.

モノクロモアレグラフィ生成手法

まず1ピッチ(1周期)の画素数を決定します.
次に,元の画像の輝度の平均を1ピッチごとで求めます.
取得できた平均の輝度から位相差に変換します.

p = \frac{b_{ave}}{255} × \pi\\
p:位相差, b_{ave}:平均輝度

位相差を用いて,基準となる格子を1ピッチ毎にそれぞれの位相差を加えます.
求まった全画素の位相から輝度を再計算し,変形後の縞を求めることができます.
cosを利用した変形格子の生成例を示します.

I(x,y) = a\cos(\theta(x,y))+b\\
a:輝度振幅,b:背景輝度

基準格子と,変形格子,そして,変形格子に基準格子を重ねた時の画像を示します.
base.png
図 基準格子
testgrad.png
図 変形格子
kasa.PNG
図 変形格子に基準格子を重ねたもの

  • 元画像はSIDBAのgirlを利用しました.ありがとうございます.

カラーモアレグラフィ生成手法

R,G,Bで分離し,各色でモノクロモアレグラフィ生成手法と同じように格子の変形を行います.
最後に,RGBを結合し,1ファイルにします.

testgrad.png
図 変形格子
kasa2.PNG
図 変形格子に基準格子を重ねたもの

  • 基準格子は,最初のものと同じです

変形格子だけを見ると何かゆがんだ格子にしか見えませんが,基準格子を重ねることで,物凄く綺麗になりますね.
とても面白いと思います.

以上で,説明を終わります.
モアレグラフィの概要,基本的な生成方法を示しました.

クリスマスなので,モアレグラフィを作成して恋人を驚かしてみてはいかがでしょうか?
モアレに興味があるかた,面白い変形方法を知っている or 思いついた方は,教えていただけると嬉しいです.

それでは皆さん,メリークリスマス🎄!!!

おまけ

私は,好きなアイドルである岩本蓮加(レンタン)のモアレグラフィを生成して終わります.
testgrad.png
図 レンタンの変形格子
rentan2.PNG
図 基準格子と変形格子を重ねたもの

  • 斜め格子を用いた場合
    testgrad.png
    図 レンタンの変形格子
    rentan3.PNG
    図 基準格子と変形格子を重ねたもの

斜め格子にする工夫は,また別記事で書こうかなと思います.

レンタンは,モアレグラフィになってもかわいいですね!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0