NumPy 基本操作(伪随机数生成)

                                                  伪随机数生成

 

numpy.random 模块填补了 python 内建的 random 模块的不足,可以高效的生成多种概率分布下的完整样本值数组。例如,我们可以使用 normal 来获得一个 4 x 4 的正态分布样本数组:

    

然而,python 内建的 random 模块一次只能生成一个值。我们可以从下面的示例中看到,numpy.random 在生成大型样本时比纯 python 的方式快了一个数量级:

    

我们可以称这些为伪随机数,因为它们是由具有确定性行为的算法根据随机数生成器中的随机数种子生成的。我们可以通过 np.random.seed 更改 NumPy 的随机数种子:

    seed( ) 用于指定随机数生成时所用算法开始的整数值:

        (1) 如果使用相同的seed( )值,则每次生成的随即数都相同;

        (2) 如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同;

        (3) 设置的seed()值仅一次有效。

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Python代码示例,用于生成伪随机数DFT水印: ```python import numpy as np import cv2 # 加载图像 img = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE) height, width = img.shape # 生成伪随机数矩阵 np.random.seed(0) rand_matrix = np.random.rand(height, width) # 将伪随机数矩阵转换为二进制 binary_rand_matrix = np.zeros((height, width), dtype=np.uint8) for i in range(height): for j in range(width): if rand_matrix[i, j] > 0.5: binary_rand_matrix[i, j] = 1 # 进行DFT变换 dft_matrix = cv2.dft(np.float32(binary_rand_matrix), flags=cv2.DFT_COMPLEX_OUTPUT) # 将水印嵌入到频域图像中 watermark = cv2.imread('watermark.png', cv2.IMREAD_GRAYSCALE) watermark = cv2.resize(watermark, (width, height)) watermark = np.float32(watermark) for i in range(height): for j in range(width): dft_matrix[i, j] = dft_matrix[i, j] * (1 + watermark[i, j] / 255) # 进行IDFT变换 idft_matrix = cv2.idft(dft_matrix, flags=cv2.DFT_SCALE) # 提取水印 extracted_watermark = np.zeros((height, width), dtype=np.uint8) for i in range(height): for j in range(width): extracted_watermark[i, j] = np.round(abs(idft_matrix[i, j])).astype(np.uint8) # 显示图像和水印 cv2.imshow('Original Image', img) cv2.imshow('Watermark', watermark) cv2.imshow('Extracted Watermark', extracted_watermark) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在这个示例中,我们首先加载了一张灰度图像,然后生成了一个伪随机数矩阵。接下来,我们将伪随机数矩阵转换为二进制形式,并对其进行DFT变换。然后,我们将一个水印嵌入到频域图像中。在进行IDFT变换之后,我们可以提取出水印并将其显示出来。 请注意,这只是一个简单的示例,真实的水印算法可能需要更复杂的处理步骤,以提高水印的鲁棒性和安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值