これは何?
紙に黒で書かれた絵があって。
何も書かれていない部分→透明
黒い部分→不透明の黒
という変換をしたくなった。
墨が薄い部分は薄さに合わせた半透明にしたい。
この作業のために簡単な画像処理をしたので、その記録。
作戦
- 紙をスキャンして、グレースケール png にする。
- 紙のテクスチャが無くなり、墨のムラを減らすようにレベル調整する。
- png を HSL に変換し、L(輝度) だけの画像を得て、白黒反転する → 輝 と名付ける。
- 元画像と同じサイズの真っ黒な画像を用意する → 黒 と名付ける。
- 赤=「黒」, 緑=「黒」, 青=「黒」, 不透明度=「輝」 で一枚の画像にする。
レベル調整
こんなコマンドで:
convert scanned.png -fx "(u-0.3)/0.5" level.png
暗部3割と明部2割を捨てて残りの5割を活かすので、こんな計算になる。
0.3
と 0.5
はスキャンする素材やスキャナによって調整する。
png を HSL に変換し、L(輝度) だけの画像を得て、白黒反転する
こんなコマンドで:
convert level.png -colorspace HSL -separate -negate lumi.png
実行すると lumi-0.png
, lumi-1.png
, lumi-2.png
の3つの画像ができてしまう。必要なのは lumi-2.png
だけ。
元画像と同じサイズの真っ黒な画像を用意する
こんなコマンドで:
convert scanned.png -evaluate multiply 0 black.png
全画素に0を乗じれば真っ黒になる。
5. 赤=「黒」, 緑=「黒」, 青=「黒」, 不透明度=「輝」 で一枚の画像にする。
こんなコマンドで:
convert black.png black.png black.png lumi-2.png -combine alphapaper.png
各プレーンを結合できる。 convert 赤 緑 青 不透明度 -combine 結果
だと思う。
処理の例
段階 | 画像 |
---|---|
スキャン画像 | ![]() |
レベル調整後 | ![]() |
反転した輝度プレーン | ![]() |
出来上がった透過画像 | ![]() |
透過画像との合成の例 | ![]() |