gpt4 book ai didi

image - CUDA float 给出不同的结果

转载 作者:行者123 更新时间:2023-12-01 09:52:32 25 4
gpt4 key购买 nike

我正在使用 CUDA 5/VC 2008 将图像从彩色转换为灰度。

CUDA 内核是:

__global__ static void rgba_to_grayscale( const uchar4* const rgbaImage, unsigned char * const greyImage,
int numRows, int numCols)
{
int pos = blockIdx.x * blockDim.x + threadIdx.x;
if (pos < numRows * numCols) {
uchar4 zz = rgbaImage[pos];
float out = 0.299f * zz.x + 0.587f * zz.y + 0.114f * zz.z;
greyImage[pos] = (unsigned char) out;
}

}

C++函数是:

inline unsigned char rgba_to_grayscale( uchar4 rgbaImage) 
{
return (unsigned char) 0.299f * rgbaImage.x + 0.587f * rgbaImage.y + 0.114f * rgbaImage.z;
}

而且它们都被恰本地调用了。然而,它们产生了不同的结果。

原图:

This colour image

CUDA 版本:

cuda result

串口CPU版本:

Serial Code result

谁能解释为什么结果不同?

最佳答案

你的CUDA函数没有问题。 CPU 版本不正确。您正在将值 0.299f * rgbaImage.x 类型转换为 unsigned char,这相当于以下代码:

inline unsigned char rgba_to_grayscale( uchar4 rgbaImage) 
{
return ((unsigned char) 0.299f * rgbaImage.x) + 0.587f * rgbaImage.y + 0.114f * rgbaImage.z;
}

您必须像这样将最终结果转换为 unsigned char:

inline unsigned char rgba_to_grayscale( uchar4 rgbaImage) 
{
return (unsigned char) (0.299f * rgbaImage.x + 0.587f * rgbaImage.y + 0.114f * rgbaImage.z);
}

关于image - CUDA float 给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16507188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com