1-6 「ソラリゼーション」
モチベーション
画素値の濃淡を一部反転させることで特殊な表現効果が見込めます。
ネガ画像とポジ画像が混じりあったような効果が得られます。
やり方
PILライブラリを使用し画像を読み込みます。読み込んだ画像の画素値に対してトーンカーブを適用し各色情報を変換します。
プログラム
画像をPILで取得しNumpy配列化します。
入力画素値127で折り返すトーンカーブを適用しています。
#!/usr/bin/python # -*- coding: utf-8 -*- # ソラリゼーション from PIL import Image import numpy as np from matplotlib import pylab as plt # 画像の読み込み im = np.array(Image.open('input.bmp')) print(im.shape, im.dtype) # ((399L, 600L, 3L), dtype('uint8')) # 画像の表示 plt.title("before") plt.imshow(im) plt.show() # 画像サイズを取得 height= im.shape[0] width = im.shape[1] ##全画素を走査し、色情報を変換する。 for x in range(height): for y in range(width): # ソラリゼーション for i in range(3): if im[x,y,i] <= 127: im[x,y,i] = im[x,y,i] * 2 else: im[x,y,i] = 255 * 2 - im[x,y,i] * 2 print(im.shape, im.dtype) # ((399L, 600L, 3L), dtype('uint8')) # 画像の表示 plt.title("after") plt.imshow(im) plt.show() #保存 Image.fromarray(im).save('output.bmp')
実行結果
補足
- ネガ画像とは、実際の明暗が逆になっている画像のことです。明るい所が黒く、暗い所が白く表示されます。ポジ画像は、ネガ画像とは逆に明るい所が白く、暗い所が黒く表示されます。
- 使用しているトーンカーブ