0

我目前正在准备一些将在 Psychtoolbox 中显示的灰度 .png 图像。这些 .png 文件都有透明背景,所以我一直在将 alpha 层添加到文件矩阵中,如下所示:

% sets up for the alpha
Screen('BlendFunction', w, 'GL_SRC_ALPHA', 'GL_ONE_MINUS_SRC_ALPHA');

[pngImage,~,alpha] = imread('image.png'); % read in the image
pngImage(:,:,4) = alpha; % add in the alpha channel
pngTexture = Screen('MakeTexture',w, pngImage); % create image texture

显示这些图像时,背景确实是透明的。然而,它们也呈现为亮红色而不是灰度(图片链接)。当我注释掉在 alpha 通道中添加的代码行时,背景不再透明,而是灰度(链接到图像)。

集合中的一些图像显示得很好,没有问题。这些图像在 Photoshop 中进行了批处理。出现问题的图像似乎是在 GIMP 中手工处理的图像。然而,整个图像集在 Psychopy 中表现得很好。(由于时间限制和需要一些特定于 MATLAB 的功能,不能用 Psychopy 编写这个项目。)

如果我不得不猜测,以我极其有限的知识,我会说将第四个二维矩阵添加到图像矩阵中会引发乘以颜色值的参数。但是,我不知道如何。有人有什么想法吗?

4

1 回答 1

1

因为你没有添加 G 和 B 通道,所以它们是零!

尝试这个:

pngImage(:,:,2) = pngImage(:,:,1); 
pngImage(:,:,3) = pngImage(:,:,1); 
pngImage(:,:,4) = alpha; % add in the alpha channel
于 2016-11-14T12:38:23.653 回答