使用matplotlib和numpy对图像应用复杂变换

2024-09-25 02:38:21 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我正在尝试使用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()

如果我得到下面的代码,我运行这个结果。 plot

如果你看到的是右边,大小就改变了。我想知道如何将结果图像放入框中。我的方法是硬编码结果图像大小并运行代码。然而,由于mobius变换扩展和收缩图像,所以有时我得到非常小的图像,有时我得到非常大的图像。任何人都能解决这个问题??谢谢!在


Tags: 代码in图像imageimportimgformatplotlib
1条回答
网友
1楼 · 发布于 2024-09-25 02:38:21

可以执行以下操作来查找变换图像的x限制和y限制:

plt.gca().set_aspect('equal')
i, j = np.where(np.all(r!=255, axis=2))
xlimits = j.min(), j.max()
ylimits = i.min(), i.max()
plt.xlim(xlimits)
plt.ylim(ylimits)

添加了set_aspect()以按原始纵横比显示图像。numpy.where()将查找图像不是白色的行和列索引(255、255、255),它使用最小和最大索引来设置新的限制。在

相关问题 更多 >