我无法找到版本1.75.01和1.82的处理对比度差异的来源。这里是显示它曾经是什么样子(1.75)两个图像, 以及它现在的样子: 与Psychopy不一致的对比处理
不幸的是,回滚是不平凡的,因为我遇到的问题具有相关性(特别是PIL v枕头)。图像是从一个numpy数组创建的,我怀疑有一些与数组如何处理(?类型,四舍五入)有关的事情发生时,从数组转换,但我找不到错误。任何帮助将深表谢意。
编辑 - 新最小例
#! /bin/bash
import numpy as np
from psychopy import visual,core
def makeRow (n,c):
cp = np.tile(c,[n,n,3])
cm = np.tile(-c,[n,n,3])
cpm = np.hstack((cp,cm))
return(cpm)
def makeCB (r1,r2,nr=99):
#nr is repeat number
(x,y,z) = r1.shape
if nr == 99:
nr = x/2
else:
hnr = nr/2
rr = np.vstack((r1,r2))
cb=np.tile(rr,[hnr,hnr/2,1])
return(cb)
def makeTarg(sqsz,targsz,con):
wr = makeRow(sqsz,1)
br = makeRow(sqsz,-1)
cb = makeCB(wr,br,targsz)
t = cb*con
return(t)
def main():
w = visual.Window(size = (400,400),units = "pix", winType = 'pyglet',colorSpace = 'rgb')
fullCon_np = makeTarg(8,8,1.0)
fullCon_i = visual.ImageStim(w, image = fullCon_np,size = fullCon_np.shape[0:2][::-1],pos = (-100,0),colorSpace = 'rgb')
fullCon_ih = visual.ImageStim(w, image = fullCon_np,size = fullCon_np.shape[0:2][::-1],pos = (-100,0),colorSpace = 'rgb')
fullCon_iz = visual.ImageStim(w, image = fullCon_np,size = fullCon_np.shape[0:2][::-1],pos = (-100,0),colorSpace = 'rgb')
fullCon_ih.contrast = 0.5
fullCon_ih.setPos((-100,100))
fullCon_iz.setPos((-100,-100))
fullCon_iz.contrast = 0.1
partCon_np = makeTarg(8,8,0.1)
partCon_i = visual.ImageStim(w, image = partCon_np,pos = (0,0), size = partCon_np.shape[0:2][::-1],colorSpace = 'rgb')
zeroCon_np = makeTarg(8,8,0.0)
zeroCon_i = visual.ImageStim(w, image = zeroCon_np,pos=(100,0), size = zeroCon_np.shape[0:2][::-1],colorSpace = 'rgb')
fullCon_i.draw()
partCon_i.draw()
fullCon_ih.draw()
fullCon_iz.draw()
zeroCon_i.draw()
w.flip()
core.wait(15)
core.quit()
if __name__ == "__main__":
main()
其中产量这样的:当转换之前产生
沿着水平的三个检验器板已经对比度阵列中改变到图像。垂直左侧显示,以后更改图像对比度可以正常工作。我不能使用它的原因是a)我已经收集了大量的数据与最后一个版本,并且b)我想通过将一个数组与另一个数组相乘来对中心的那些大长条的对比度进行分级,例如,使用对数刻度或其他函数,并且在数学上做数学更容易。
我仍然怀疑问题在于np.array - > pil.image的转换。这些数组的dtype
是float64,但即使我强制float32没有变化。如果在半对数转换前检查数组,它会填充0.5和-0.5数字,但我认为在转换时所有负数都变成黑色和黑色被设置为0。
要添加到这一点,使用''psychopy.useVersion'',这种行为出现在版本1.81,但在1.80的行为更怪。由于某些导入问题,我无法在此之前运行版本,但是您可以继续操作。在脚本的顶部,运行''import psychopy''并在下一行''psychopy.useVersion(1.76.00')''。这就是它可以回滚的程度。顺便说一下,这不是一个非常小的例子,因为它导入了很多东西,并定义了几个永远不会使用的变量。 –
我找到了解决办法,但它不是真正的答案。你可以取第一个NxNx3数组的“层”。显然,图像转换将适当地处理漂浮物,例如, 'partCon_i_FIXED = visual.ImageStim(w,image = partCon_np [:,:1],size = partCon_np.shape [0:2] [:: - 1],pos =(0,100),colorSpace ='rgb')' 。但是这与使用完整阵列并随后调整对比度时看起来不完全一样。 – brittAnderson