Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 生成倾斜正弦波的图像_Python_Numpy_Matplotlib - Fatal编程技术网

Python 生成倾斜正弦波的图像

Python 生成倾斜正弦波的图像,python,numpy,matplotlib,Python,Numpy,Matplotlib,如何在Python中生成以下灰度图像 下面的代码生成水平模式,但我需要一个倾斜模式 import numpy as np import matplotlib.pyplot as plt N = 256 x = np.linspace(-np.pi,np.pi, N) sine1D = 128.0 + (127.0 * np.sin(x * 8.0)) sine1D = np.uint8(sine1D) sine2D = np.tile(sine1D, (N,1)) print(sine2D.s

如何在Python中生成以下灰度图像

下面的代码生成水平模式,但我需要一个倾斜模式

import numpy as np
import matplotlib.pyplot as plt

N = 256
x = np.linspace(-np.pi,np.pi, N)
sine1D = 128.0 + (127.0 * np.sin(x * 8.0))
sine1D = np.uint8(sine1D)
sine2D = np.tile(sine1D, (N,1))
print(sine2D.shape)
plt.imshow(sine2D, cmap='gray')

您可以使用来移动1D正弦数据:

import numpy as np
import matplotlib.pyplot as plt

N = 256
x = np.linspace(-np.pi,np.pi, N)
sine1D = 128.0 + (127.0 * np.sin(x * 8.0))
sine1D = np.uint8(sine1D)
sine2D = np.ndarray((N,N), dtype=np.uint8)
for i in range(N):
    sine2D[i]= np.roll(sine1D,-i)  # shift the 1D sin data by -i, -i increases with rows
plt.imshow(sine2D, cmap='gray')
plt.show()
输出:

如果滚动1D数据,将获得所需的倾斜图案。如果你想要一个特殊的倾斜角度,你必须在每一个倾斜行上多/少滚动1次,以使其更平坦/更陡峭

文件:


以下是对您的评论的回应@Patrick Artner的回答:

如我们所见,numpy.roll无法生成平滑图案

函数
np.roll
不负责结果图像的平滑度,它是函数。您需要告诉它如何正确插值生成的数据。因此,只需为函数调用指定
interpolation
关键字参数,您就可以获得以下示例:

plt.imshow(sine2D,interpolation='bilinear', cmap='gray')
这将导致更平滑的结果:


但是还有很多其他的可能性:
'bicubic'
'spline16'
'spline36'

您可能还想将numpy添加到您的标记中,下面可能有一个numpy快捷方式指向我的循环。如何旋转它?如果大家都阅读这个主题,我将不胜感激,另外,请看一看谢谢你的回答。如我们所见,numpy.roll无法生成平滑图案。我认为,如果我们可以组合两个一维正弦波,一个在x方向,另一个在y方向,即类似于
sin((x+y)*8.0)
,我们可以得到一个平滑的图形。然而,我还不能实现这个想法。