MATLAB、Python、Scilab、Julia比較ページはこちら
https://www.simulationroom999.com/blog/comparison-of-matlab-python-scilab/
はじめに
の、
MATLAB,Python,Scilab,Julia比較 第3章 その62【アフィン変換⑥】
を書き直したもの。
タイトルはアフィン変換になっているが、
実際にはキャンバス拡張の話。
今回はPython(NumPy)で実施する。
キャンバス拡張【再掲】
まずは、キャンパス拡張のイメージを再掲。
今回は、これをPython(NumPy)で実現する。
Pythonコード
Pythonコードは以下。
import numpy as np
import cv2
# キャンパス拡張
def canvas_expansion(img, x, y):
H,W=img.shape
WID=W+x
HID=H+y
e_img = np.zeros((HID, WID),dtype='uint8')
e_img[int((HID-H)/2):int((HID+H)/2), int((WID-W)/2):int((WID+W)/2)] = img;
img = e_img
return img
def affine_transformation_test( ):
# 入力画像の読み込み
img = cv2.imread("dog.jpg")
b = img[:,:,0]
g = img[:,:,1]
r = img[:,:,2]
# SDTVグレースケール
img = np.array(0.2990 * r + 0.5870 * g + 0.1140 * b, dtype='uint8')
# キャンパス拡張
img = canvas_expansion(img, 300, 300)
# グレースケール画像の書き込み
cv2.imwrite("dog_canvas_expansion.jpg", img)
affine_transformation_test( )
処理結果
処理結果は以下。
考察
これも手順としてはMATLABと一緒。
黒の空間を作ってるコードは以下になる。
e_img = np.zeros((HID, WID),dtype='uint8')
ここでuint8の型指定をしている。
画像データ自体がuint8のため、それに合わせてる。
MATLABのように保存時にuint8にキャストするのもアリ。
ここら辺の型の問題がいきなり顔を出すから画像処理系は混乱しやすい。
と言っても、型のミスがあると、まともな画像にならないから、
気付きやすいミスではある。
まとめ
- キャンパス拡張をPython(NumPy)で実施。
- 手順としてはMATLABと一緒。
- 黒空間を作る際にuint8の型で作成。
- 保存時にキャストしてもOK。
MATLAB、Python、Scilab、Julia比較ページはこちら
コメント