①元画像は正方形
②画像の中央は元画像の約3倍の拡大がなされます
③元画像の大きさ (pix, pix)
そのピクセル座標( x、y )に対しての拡大の倍率は
1 / {p + {(x - pix /2)^2 + (y - pix /2)^2}^0.5} ・q
p ≅ pix / 10
q ≅ 3p
しかし、Aの逆行列を使って戻そうとしているのですが
上手くいきません
恐らく他の何処かが間違っているのでしょう
元画像
変更後の画像
コード
import matplotlib.pyplot as plt
import numpy as np
import cv2
import numpy as np
import cv2
s = 1
# load image
img = cv2.imread('Lenna.png')
# load image
img = cv2.imread('Lenna.png')
#img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
# show image with matplotlib
pix = img.shape[0]
pix = img.shape[0]
x = np.linspace(-1,1,pix+1) # define square
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.gray()
plt.gray()
import sys
plt.figure(figsize=(5, 5))
for i in range(pix):
sys.stdout.write(str(i))
sys.stdout.write(" ")
for j in range(pix):
p=pix/10
q=3*p
L1 = 1 /(p + np.sqrt((i-pix/2)**2 + (j-pix/2)**2)) * q
L2 = 1 / (p + np.sqrt((i+1-pix/2)**2 + (j-pix/2)**2)) * q
L3 = 1 / (p + np.sqrt((i+1-pix/2)**2 + (j+1-pix/2)**2)) * q
L4 = 1 / (p + np.sqrt((i-pix/2)**2 + (j+1-pix/2)**2)) * q
A = np.array([[L1, 0, 0, 0], [0, L2, 0, 0], [0, 0, L3, 0], [0, 0, 0, L4]])
B = np.array([x[i],x[i+1],x[i+1],x[i]])
C = np.array([x[j],x[j],x[j+1],x[j+1]])
tx_z = np.dot(A, B)
ty_z = np.dot(A, C)
zt = tx_z + 1j*ty_z
tx = tx_z * 2
ty = ty_z * 2
clr_b = np.double(img[ pix - j - 1 , i,0])/256
clr_g = np.double(img[pix - j - 1 , i,1])/256
clr_r = np.double(img[pix - j - 1 , i,2])/256
plt.fill(tx,ty,color=(clr_r,clr_g,clr_b))
sys.stdout.write(str(i))
sys.stdout.write(" ")
for j in range(pix):
p=pix/10
q=3*p
L1 = 1 /(p + np.sqrt((i-pix/2)**2 + (j-pix/2)**2)) * q
L2 = 1 / (p + np.sqrt((i+1-pix/2)**2 + (j-pix/2)**2)) * q
L3 = 1 / (p + np.sqrt((i+1-pix/2)**2 + (j+1-pix/2)**2)) * q
L4 = 1 / (p + np.sqrt((i-pix/2)**2 + (j+1-pix/2)**2)) * q
A = np.array([[L1, 0, 0, 0], [0, L2, 0, 0], [0, 0, L3, 0], [0, 0, 0, L4]])
B = np.array([x[i],x[i+1],x[i+1],x[i]])
C = np.array([x[j],x[j],x[j+1],x[j+1]])
tx_z = np.dot(A, B)
ty_z = np.dot(A, C)
zt = tx_z + 1j*ty_z
tx = tx_z * 2
ty = ty_z * 2
clr_b = np.double(img[ pix - j - 1 , i,0])/256
clr_g = np.double(img[pix - j - 1 , i,1])/256
clr_r = np.double(img[pix - j - 1 , i,2])/256
plt.fill(tx,ty,color=(clr_r,clr_g,clr_b))
plt.gca().set_aspect('equal', adjustable='box')
sc = 1.1
plt.xlim(-s*sc,s*sc)
plt.ylim(-s*sc,s*sc)
plt.savefig("gyogan.png")
plt.show()
sc = 1.1
plt.xlim(-s*sc,s*sc)
plt.ylim(-s*sc,s*sc)
plt.savefig("gyogan.png")
plt.show()

