代码之家  ›  专栏  ›  技术社区  ›  Ali Momen

在python中,使用一个图像的RGB值在另一个图像中创建感兴趣的区域

  •  3
  • Ali Momen  · 技术社区  · 7 年前

    我想编写一个视觉搜索任务,在该任务中,参与者将看到一个视觉场景,并且必须通过单击来识别目标对象,此时试验结束。对于每个嵌入目标(视觉场景刺激)的视觉场景,我有一个伴随图像,除了目标(目标刺激)之外,该图像是完全空白的,它是黑色的,并且与视觉场景刺激中的位置相同。

    我已经创建了一些实验,在这些实验中,python从图像库中提取一个视觉场景,并将其呈现给参与者,如下所示。。

    for i in range(numTrials):
        theTrial = trialOrder[i]                        # grab pre-shuffled trial index
    
        win.flip()
        core.wait(1.0)              # wait one second
    
        living_images[i].draw()
    

    然而,我不知道如何为每个视觉场景刺激的目标创建一个感兴趣的区域,并在单击该部分时进行试验结束。

    我想我应该创建一个CSV,其中视觉场景刺激在一列中,目标在另一列中,然后告诉python根据每个对应目标图像的RGB值为每个视觉场景刺激创建一个感兴趣的区域(因为它们是空白的,除了与视觉场景刺激相同位置的黑色目标)。

    1 回复  |  直到 7 年前
        1
  •  1
  •   en_lorithai    7 年前

    我不知道你是如何设置你的用户界面,以及用户应该如何与图像交互,但如果你的场景图像和伴随的目标图像大小相同,你可以将伴随图像用作掩码。

    让用户单击图像(视觉场景)并捕捉他们选择的位置。然后在该位置检查伴随目标图像的值。如果该值为1(或0,取决于您选择的“活动”值),您会得到一个点击并继续前进。基本上,您可以使用目标图像作为ROI。

    下面是一个如何实现的小示例

    import matplotlib.pyplot as plt
    import numpy as np
    
    fig, ax = plt.subplots()
    ax.imshow(mask)
    
    mask = np.zeros((50,50))
    mask[5:10,5:10]=1
    
    xi = 0
    yi = 0
    
    def onclick(event):
        global xi,yi,mask
        xi,yi = event.xdata,event.ydata
        if mask[int(xi),int(yi)]>=1:
            print('inside')
        else:
            print('outside')
    
    cid = fig.canvas.mpl_connect('button_press_event', onclick)
    

    https://matplotlib.org/users/event_handling.html .