什么是转换" uint8 RGB像素的公式"到" uint8灰度像素"值?

时间:2017-01-28 22:42:35

标签: matlab image-processing

我使用以下公式将RGB图像转换为灰度图像,但它似乎无法正常工作。

gray_pixel = (r_pixel + g_pixel + b_pixel) / 3

2 个答案:

答案 0 :(得分:2)

您可能遇到问题,因为b_pixelg_pixeluint8是整数,因此当您尝试取三者的平均值时,您会得到不正确的结果,因为任何添加或者这些数字的划分强制为uint8(255) + uint8(255) + uint8(255) % 255 ,这意味着如果红色,绿色和蓝色全部为255,则无法正确地将值相加。

gray_pixel = (double(r_pixel) + double(g_pixel) + double(b_pixel)) / 3;

您需要先将它们全部转换为浮点数。

uint8

如果您确实需要uint8灰度图像,则可以将结果转换为gray_pixel = uint8(gray_pixel);

grayim = rgb2gray(img);

话虽这么说,但这并不是从RGB图像创建灰度图像的最佳方法。使用MATLAB的最简单方法是使用内置函数example here

gray_pixel = 0.2989 * r_pixel + 0.5870 * g_pixel + 0.1140 * b_pixel;

他们使用的实际配方是rgb2gray

set wsSh = CreateObject("WScript.Shell")

Folder = wsSh.SpecialFolders.Item("AppData") & "\Microsoft\Internet Explorer\Quick Launch"
Set myShortcut = wsSh.CreateShortcut(Folder & "\1.lnk")
MyShortcut.IconLocation = "C:\Users\Username\Desktop\2.dll, 1"

myShortcut.Save

答案 1 :(得分:0)

除了上面使用rgb2gray的建议之外,我想说你的公式有问题,这是一个不适合uint8的总和,因为它以255为界。你可以先将数字转换为uint16,计算平均值和然后将结果转换为uint8。

 gray_pixel = uint8([uint16(r_pixel) + uint16(g_pixel) + uint16(b_pixel)] / 3)