使用矩阵改变图像的对比度是否正确?

问题描述

编辑:已解决 - 我在下面的答案中发布了解决方

所以我一直试图改变图像与矩阵的对比度,这就是我想出的:

final defaultColorMatrix = const <double>[
  1,1,];

List<double> calculateContrastMatrix(double contrast) {
final m = List<double>.from(defaultColorMatrix);
m[0] = contrast;
m[6] = contrast;
m[12] = contrast;
m[5] = (1 - contrast) / 2;
m[10] = (1 - contrast) / 2;
m[15] = (1 - contrast) / 2;
return m;

在0到1之间的对比度和可调值

它给了我次优的结果

解决方法

我刚刚意识到最后一列不是 m[5],m[10],m[15] 而是它的 m[4],m[9],m[14] 忘记了 dart 的数组索引从 0 开始... 面掌

并且还忘记了颤振矩阵中的最后一列没有标准化为它期望的值在 0-255 之间,因此正确的解决方案是:

List<double> calculateContrastMatrix(double contrast) {
  final m = List<double>.from(defaultColorMatrix);

  m[0] = contrast;
  m[6] = contrast;
  m[12] = contrast;

  m[4] = ((1 - contrast) / 2) * 255;
  m[9] = ((1 - contrast) / 2) * 255;
  m[14] = ((1 - contrast) / 2) * 255;

  return m;

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...