c# - 这个颜色矩阵如何使图像变成黑白的?

标签 c# .net image-processing matrix

我正在学习图像处理,并看到了如何通过更改颜色矩阵将图像变成黑白的实现。下面是来自 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);

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

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

最佳答案

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

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

关于c# - 这个颜色矩阵如何使图像变成黑白的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18887966/

相关文章:

python - 在Python中从图像中提取每个像素的x,y坐标

c# - 后台按键监听器

c# - 将 FileSavePicker 与 MessageDialog 的 IUICommand 事件一起使用

.net - Windows 服务将文件写入网络共享

image-processing - 卷积与相关

python - 有效地从python中的图像中提取一定大小的补丁

c# - 为什么我不能使用 Entity Framework 保存当前的 DateTime.Now

c# - Dispatcher.Invoke 更新 WPF Canvas 会导致性能问题

c# - 尝试将 XmlElementAttribute 分配给 .NET CF 下的自定义 IXmlSerializable 对象时出现 InvalidOperationException

.net - visual studio 2008 CSS升级