这个颜色矩阵如何使图像黑白

本文关键字:何使 图像 黑白 颜色 色矩 | 更新日期: 2023-09-27 18:31:50

我正在学习图像处理,并看到了如何通过更改颜色矩阵将图像转换为黑白的实现。下面是 Craigs Utility Library 中此类函数的实现:

ColorMatrix TempMatrix = new ColorMatrix();
TempMatrix.Matrix = new float[][]{
                     new float[] {.3f, .3f, .3f, 0, 0},
                     new float[] {.59f, .59f, .59f, 0, 0},
                     new float[] {.11f, .11f, .11f, 0, 0},
                     new float[] {0, 0, 0, 1, 0},
                     new float[] {0, 0, 0, 0, 1}
                    };
Bitmap NewBitmap = TempMatrix.Apply(Image);

我从这篇文章中知道矩阵代表 RGBAW(红绿蓝琥珀色和白色)。因此,根据我的理解,颜色矩阵将每种RGB颜色与数组{.3f,.59f,.11f}相乘。但是我相信我错过了最后一步。

使图像黑白的常量 .3f、.59f 和 .11f 从何而来?这种矩阵乘法如何使图像黑白?

这个颜色矩阵如何使图像黑白

这些系数基于人类对颜色的感知,这是从RGB到灰色的标准转换。请参阅维基百科页面 http://en.wikipedia.org/wiki/Grayscale

编辑:为了回答您问题的另一部分,矩阵实际上并没有从 3 个颜色通道变为 1 个,它只是将所有 3 个颜色通道设置为相同的值0.3*R + 0.59*B + 0.11*G。该矩阵适用于 5 通道图像,它根本不会更改最后一个通道。