Python 给图像添加噪音心理变态

Python 给图像添加噪音心理变态,python,image,noise,psychopy,Python,Image,Noise,Psychopy,我试图给《心理变态》中的图像添加噪音。我使用的是imread,但似乎无法读取需要在整个图像中为单个像素添加噪声的格式的图像。我希望有人能知道我是如何做到这一点的 具体来说,我的任务是在参与者自己的感知阈值上向他们呈现刺激。我正在使用一个自适应楼梯程序(任务处理器)在两次试验之间滴定添加到图像中的噪声量,以达到该阈值。i、 即,参与者正确识别图像,下一幅图像噪声较大;他们不正确地识别图像,下一次试验的噪音更小。我们通过反复试验来获得参与者正确回答一定百分比试验所需的噪音量 我试图通过改变单个像素来

我试图给《心理变态》中的图像添加噪音。我使用的是imread,但似乎无法读取需要在整个图像中为单个像素添加噪声的格式的图像。我希望有人能知道我是如何做到这一点的

具体来说,我的任务是在参与者自己的感知阈值上向他们呈现刺激。我正在使用一个自适应楼梯程序(任务处理器)在两次试验之间滴定添加到图像中的噪声量,以达到该阈值。i、 即,参与者正确识别图像,下一幅图像噪声较大;他们不正确地识别图像,下一次试验的噪音更小。我们通过反复试验来获得参与者正确回答一定百分比试验所需的噪音量


我试图通过改变单个像素来添加高斯噪声,在每次试验中添加的噪声量等于从quest处理程序传递的噪声的百分比。我不想改变原来的形象。我设想通过将图像读取为像素矩阵,复制它,向矩阵中的像素添加噪声,并为该试验提供新的刺激来实现这一点。我用来读取图像的imread函数似乎无法做到这一点——有人有什么建议吗

我已经演示了如何使用
cv2
读取图像并对其应用不同级别的噪声。添加噪波不会修改原始图像。正如@Michael MacAskill在他的评论中所写的那样,您可以通过单个向量操作将噪声应用于图像。在我的回答中,我创建了一个平均值为1的高斯分布,形状与图像相同,然后将其与图像相乘。通过增加高斯噪声分布的标准偏差,可以提高噪声水平

导入cv2
将matplotlib.pyplot作为plt导入
将numpy作为np导入
def应用_噪声(图像、比例):
“”“返回带噪波的图像。”。
参数
----------
image:ndarray,应用了噪波的图像。
刻度:正浮点数,高斯分布的标准偏差
噪声分布。
"""
image=np.asarray(图像)
#创建高斯噪声阵列。
噪声=np.随机.正常(loc=1.0,比例=比例,大小=图像.形状)
#应用噪波阵列。
噪声=图像*噪声
#转换为整数类型。
嘈杂=嘈杂。aType(np.int32)
#将值剪裁到RGB边界。
嘈杂=嘈杂。剪辑(0,255)
回音嘈杂
我下载了一个使用

wget -qO "astronaut.jpg" https://live.staticflickr.com/8674/16504233985_9f1060624e_q_d.jpg
下面是示例结果。原始图像:

img=cv2.imread(“automotor.jpg”)
#从BGR到RGB的转换
img=img[…,:-1]
plt.imshow(img)

应用了一些噪波的图像:

img\u a=应用噪声(图像=img,比例=0.1)
plt.imshow(img_a)
产品名称(“高斯标准偏差=0.1”)

应用更多噪波的图像:

img\u b=应用噪声(图像=img,比例=0.5)
plt.imshow(img_b)
产品名称(“高斯标准偏差=0.5”)

我已经演示了如何使用
cv2
读取图像并对其应用不同级别的噪声。添加噪波不会修改原始图像。正如@Michael MacAskill在他的评论中所写的那样,您可以通过单个向量操作将噪声应用于图像。在我的回答中,我创建了一个平均值为1的高斯分布,形状与图像相同,然后将其与图像相乘。通过增加高斯噪声分布的标准偏差,可以提高噪声水平

导入cv2
将matplotlib.pyplot作为plt导入
将numpy作为np导入
def应用_噪声(图像、比例):
“”“返回带噪波的图像。”。
参数
----------
image:ndarray,应用了噪波的图像。
刻度:正浮点数,高斯分布的标准偏差
噪声分布。
"""
image=np.asarray(图像)
#创建高斯噪声阵列。
噪声=np.随机.正常(loc=1.0,比例=比例,大小=图像.形状)
#应用噪波阵列。
噪声=图像*噪声
#转换为整数类型。
嘈杂=嘈杂。aType(np.int32)
#将值剪裁到RGB边界。
嘈杂=嘈杂。剪辑(0,255)
回音嘈杂
我下载了一个使用

wget -qO "astronaut.jpg" https://live.staticflickr.com/8674/16504233985_9f1060624e_q_d.jpg
下面是示例结果。原始图像:

img=cv2.imread(“automotor.jpg”)
#从BGR到RGB的转换
img=img[…,:-1]
plt.imshow(img)

应用了一些噪波的图像:

img\u a=应用噪声(图像=img,比例=0.1)
plt.imshow(img_a)
产品名称(“高斯标准偏差=0.1”)

应用更多噪波的图像:

img\u b=应用噪声(图像=img,比例=0.5)
plt.imshow(img_b)
产品名称(“高斯标准偏差=0.5”)

imread
应该返回一个对象,允许您通过像素的坐标直接访问像素:请参见,记住按“Python”按钮查看正确的语法。这很有帮助,谢谢。我想我一直在使用它的地方是,我希望避免使用坐标逐像素搜索来添加噪声-我的脚本是以一定的百分比添加随机分布的噪声。这种方法需要使用坐标搜索我想要改变的每个像素,对吗?不,它是一个矩阵,因此(例如使用
numpy
库),您可以使用噪声分布矩阵,一步(即单个矩阵相加)将图像和噪声的所有对应元素(即像素)相加. e、 好的。您提供的代码就是我用来给图像添加噪声的代码。我们在尝试实现它时遇到的错误使我们相信我们的图像没有被正确读取。我将尝试使用您的第一条评论中的信息编辑此内容,并将更新是否成功!好的,祝你好运。如果问题仍然存在,为了获得有用的具体答案(而不是像这样的评论流),您可能应该将帖子编辑为s