レンズの歪曲収差と対応方法(4)

美味しそうな台湾産パイナップルを片手に安倍晋三前首相がツイート。写真を拝見するとレンズの歪みが出ていました。

この画像を過去に紹介したレンズ歪み矯正プログラムで顔の部分が補正されるようにします。

# coding: utf-8
import decimal as d
import subprocess

## dstort_barrel_ブログ用.py
## オリジナル画像を任意の数値毎に歪ませた画像を生成します

## オリジナル画像
original_image='パイナップル'
## アウトプット画像が入るフォルダ
output_folder='output'
## distortion する値
distortion_value='0.005'
## rotate の値
rotate = ' -rotate -0'


## ImageMagick を使った樽型歪画像を作成するクラス
class create_barrel_image_class:
	## 樽型歪画像を作成するメソッド
	def barrel_value_cmd(self, image, value):
		cmd = "convert {} ".format(image) + rotate
		barrel_value = " -distort barrel '0.0 0.0 {}'".format(value)
		# ~ output_image = ' ' + output_folder + '/'+image+"_{}".format(value)
		output_image = ' ' + output_folder + '/'+image+"_lensD_{}".format(value)
		cmd = cmd + barrel_value +  output_image
		res = subprocess.run([cmd], shell=True)
		print(res)
	
	def create_animation_gif():
		cmd = 'convert -layers optimize -loop 0 -delay 10 ' + output_folder + '/* ' + output_folder + '/anim.gif'
		# ~ print(cmd)
		res = subprocess.run([cmd], shell=True)
		print('★', res)


if __name__ == '__main__':
	## 小数点の配列 value_C_list の作成
	value_C_list = []
        ## 初期値を0.0へ変更
	num = d.Decimal('0.0')
	for i in range( 40 ):
                ## 初期値0.0から数値を増加へ変更
		num += d.Decimal(distortion_value)
		value_C_list.append(float(num))
	
	## barrel_value_cmd メソッドを複数回呼び出し
	barrel = create_barrel_image_class()
	for value in value_C_list:
		barrel.barrel_value_cmd( original_image, value )
	
	## animation gif画像を作成する
	create_barrel_image_class.create_animation_gif()

検証結果

上記Pythonコードで出来たファイルを元ファイルと比較します。

まとめ

補正前と補正後ではレンズ歪みの状態が肉眼で分かります。これくらい歪んでいるとプログラム側からは違う人物と弾かれてしまう可能性があります。インプット画像を歪ませるかカメラ自体をキャリブレーションする必要があります。

台湾産のパイナップルはとても甘くて美味しいそうです。まるごとだと食べるまでと後処理が大変なので缶詰で買いたいです。