嗨,我正在尝试使用matplotlib将mobius变换应用于图像。这是实现这一点的python代码。在
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from numpy import *
img = mpimg.imread('test.jpg') # load an image
zi = [766j, 512+766j, 256+192j]
wi = [738j, 512+496j, 256+173j]
r = ones((600,700,3),dtype=uint8)*255 # empty-white image
for i in range(img.shape[1]):
for j in range(img.shape[0]):
z = complex(i,j)
qf = ((wi[0] * (-wi[1] * (zi[0]-zi[1]) * (z-zi[2]) + wi[2] * (z-zi[1]) * (zi[0]-zi[2])) - wi[1]*wi[2]*(z-zi[0]) * (zi[1]-zi[2])))
qs = (wi[2]*(zi[0]-zi[1])*(z-zi[2])-wi[1]*(z-zi[1])*(zi[0]-zi[2])+wi[0]*(z-zi[0])*(zi[1]-zi[2]))
w = qf/qs
r[int(imag(w)),int(real(w)),:] = img[j,i,:]
plt.subplot(121)
plt.imshow(img,origin='lower',aspect='auto')
plt.subplot(122)
plt.imshow(r,origin='lower',aspect='auto')
plt.show()
如果我得到下面的代码,我运行这个结果。
如果你看到的是右边,大小就改变了。我想知道如何将结果图像放入框中。我的方法是硬编码结果图像大小并运行代码。然而,由于mobius变换扩展和收缩图像,所以有时我得到非常小的图像,有时我得到非常大的图像。任何人都能解决这个问题??谢谢!在
可以执行以下操作来查找变换图像的x限制和y限制:
添加了
set_aspect()
以按原始纵横比显示图像。numpy.where()
将查找图像不是白色的行和列索引(255、255、255),它使用最小和最大索引来设置新的限制。在相关问题 更多 >
编程相关推荐