Low Res Pixel Cam
Year: 2024
Type: software
Overview
Raspberry Pi 5にカメラとディスプレイをつないで、カメラに映ったものをリアルタイムにピクセルパターンへ変換するデバイスを作った。
ハードウェアの構成は、Raspberry Pi 5、Hyperpixel 4 Square(720×720の正方形ディスプレイ)、Raspberry Pi用のカメラモジュール、そしてパラメータ操作用のM5 Dialという組み合わせになっている。M5 Dialのダイヤルを回すと画像処理のパラメータが変わり、ディスプレイ上のエフェクトがリアルタイムに変化する。M5 Dial側のディスプレイにも現在のパラメータ値が表示されるようにしてある。
このプロジェクトは、2023年10月にCONTRASTというギャラリーで開催した「Every Subpixel Matters」展の延長線上にある。弓場・相樂・堀川の3人で、サブピクセルに関するさまざまな展示を行ったのがきっかけになっている。その後、2024年4月にコクヨ東京品川オフィスTHE CAMPUSで開催されたFeatured Projectsに、同じpx_perimentチーム (その後、Every Subpixel Mattersにリネームした) としてこのピクセル変換カメラをデモ出展した。
Prerequisites
ハードウェア
- Raspberry Pi 5
- Hyperpixel 4 Square(720×720 正方形タッチディスプレイ)
- Raspberry Pi用カメラモジュール
- M5 Dial(パラメータ操作用のダイヤルデバイス)
ソフトウェア
ソフトウェアはProcessingで書いている。Raspberry Piという限られたCPUリソースの上で、Linuxベースの環境で柔軟に画像処理のコードを書けるツールとして選んだ。オフラインで動作する必要があったのも大きい。展示で使うデバイスなのでネットワーク接続に依存したくなかった。
主に使っているライブラリは以下の通り。
- OpenCV for Java — 顔検出と背景差分に使っている。カメラの前に人がいるかどうかの判定や、人物のシルエット抽出に利用している。
- OscP5 — Open Sound Controlプロトコルでの通信用。外部からパラメータを変更できるようにしている。
- VideoExport — 処理結果をMP4として録画する機能に使っている。

Approach
グリッド置換の仕組み
中心となるアルゴリズムはシンプルで、カメラから取得した画像をグリッド状に分割し、各セルの明るさに応じてあらかじめ用意されたパターン画像に置き換えるというもの。
具体的な流れとしては、まず入力画像を設定されたピクセルステップ(例えば8ピクセル刻み)でグリッドに区切る。各セルの明るさを取得して、その明るさに近いパターンを選んで描画する。パターンの選択にはランダムシードを使っていて、同じ明るさのセルでも毎回同じパターンにならないようにしつつ、フレーム間では一貫性を保つようにしている。
カラーのブレンドモードも7種類用意してあり、パターンの色をそのまま使うモード、反転させるモード、元画像の色と合成するモードなどを切り替えられる。
ディザリングとの組み合わせ
グリッド置換とは別に、ディザリング処理も実装している。ordered dithering(Bayerマトリクスベース)と、画像から生成するカスタムディザリングマトリクスの2種類がある。
面白かったのは、ディザリングとグリッド置換を組み合わせたモードで、試行錯誤の中でこの2つを重ねると予想外に面白いエフェクトが出ることがわかり、採用することにした。入力画像に対してまずディザリングをかけ、その結果に対してグリッド置換を行う(あるいはその逆)ことで、単体では得られない独特の質感が生まれる。
LODという考え方
「Every Subpixel Matters」展のテーマにLOD(Level of Detail)という概念があった。3DCGでは遠くのオブジェクトのディテールを落として描画する手法だけど、それを画像表現に転用するような発想がPatternize Cameraにも流れている。少ないディテール(限られたパターンや色数)でイメージを再構成するという考え方で、サブピクセルの探求からの地続きの試みになっている。
パラメータ管理
すべての表示モードのパラメータはCSVファイル(initialParameters.csv)で管理している。ピクセルステップ、量子化レベル、使用するパターンセット、ディザリングの有無、カラーパレットの適用タイミングなどが各モードごとに定義されていて、コードを変更せずにCSVを編集するだけで表示のバリエーションを変えられるようにしてある。
Experiments
これまでの試行錯誤
開発は2024年5月に本格的に始まり、約半年かけてさまざまな機能を追加していった。
最初はグリッド置換の基本的なロジックから始めて、パターンの複数セット対応、ディザリングとの統合、顔検出による自動モード切替、動画の録画・再生機能と、徐々に機能を積み重ねている。CSVベースのパラメータ管理は途中から導入したもので、モードのバリエーションが増えるにつれて、コード内にハードコードするのが辛くなったため。
ブレンドモードの追加や、カラーパレットの適用タイミング(ディザリング前・後、グリッド置換前・後)を切り替えられるようにしたのも、試行錯誤の結果として生まれた設計になっている。「こう組み合わせたらどうなるか」を繰り返し試して、面白いと感じた組み合わせを残すというプロセスで進めていった。
デバイスの外観
実験的なカメラデバイスとして制作していたことから、完成品として閉じるのではなく、展示期間中も調整や改良を続けられる状態を維持した。ケーブルや基板はあえて露出させ、部品の交換や配線の変更を容易に行える構成とした。

Findings
Raspberry Pi上でのパフォーマンス
パフォーマンスはかなり気にしながら開発を進めた。コミット履歴を見ると、2024年5月の開発開始から11月にかけて、段階的にリファクタリングと最適化を行っている。
特にカメラ周りの処理が重くなりがちで、カメラの初期化処理、アスペクト比の変換、90度回転の処理などは何度か手を入れている。ハードウェアの回転でまかなえる部分はソフトウェア側での変換を避けるようにした。
解像度についても、同じコードで複数の解像度に対応できるようにしてある。ピクセルステップを1にすれば360px幅の処理になり、2にすれば180px幅になる。Raspberry Piの処理能力に合わせて、リアルタイムに動くラインを探りながら調整できるようにした。
M5 Dialの制約
ダイヤル制御に使ったM5 Dialは便利なデバイスだけど、メモリが案外少ないという問題があった。ファームウェアはUIFlow2というノードベースのプログラミング環境で書いたが、使えるノード数に結構厳しい制限があり、当初考えていた複雑なUI挙動は実現できなかった。最終的にはシンプルな操作に割り切ることになったが、パラメータを変える・値を表示するという基本的な用途には十分に機能している。
展示での反応
Featured Projectsで出展した際、このカメラデバイスは結構人気があった。来場者が確実に面白がってくれていたので、やはりアップデートしていきたいと感じた。自分の映像がリアルタイムにピクセルパターンに変換されるという体験は、技術的な説明なしでも直感的に楽しめるものだったと思う。(J.H.)
当初はカメラを操作側とは反対側に設置していた。しかし、『Featured Projects』初日の来場者の反応を観察すると、風景を映すよりも自身の姿を映した方がエフェクトの違いを直感的に理解しやすく、体験そのものを楽しんでもらえているようだった。
そこで2日目の開始前に、カメラを手前側に配置できる筐体を急遽3Dプリントで制作し、デバイスを見ながら効果の変化を確認できる構成へと変更した。結果として、自撮りをしながら画面の映像をスマートフォンで撮影する来場者も多く見られ、自然な会話が生まれるきっかけとなった。結果的に、この時の試みが、『Detail of Me』に繋がっていく。(詳細はこちら)(T.Y.)
文字フリマ2024
文字フリマ2024では、『Every Subpixel Matters』のプロセス本やリソグラフポスターを販売するとともに、『Low Res Pixel Cam』のデモ展示を行った。 『Low Res Pixel Cam』は、撮影時の映像にリアルタイムでエフェクトを適用できるほか、静止画や動画ファイルに対しても同様の処理を行うことができる。掲載している映像は、イベント終了後に収録したデモ映像である。(T.Y.)
Credits
プログラミング: Junichiro Horikawa
企画・ディレクション: Taro Yumiba
Last updated: 2026-05-30
