编辑1: 重写问题以便更清楚地理解。
这个问题真的让我很纠结。
我想对一张图像应用一个过滤器,使得超过某个阈值的值显示为完全白色,而所有小于或等于该阈值的值则完全显示为黑色。
这里是一个表示3x3像素图像的RGB值的地图:
|(255,255,255)|(220,220,220)|(100,100,100)|
|(254,254,254)|(12 ,12 ,12 )|(38 ,38 ,38 )|
|(201,201,201)|(105,105,105)|(60 ,60 ,60 )|
在应用我的滤镜后,我希望得到一张图像,其中所有大于200的值都转换为(255,255,255),所有小于或等于200的值都转换为(0,0,0),如下所示:
|(255,255,255)|(255,255,255)|(0 ,0 ,0 )|
|(255,255,255)|(0 ,0 ,0 )|(0 ,0 ,0 )|
|(255,255,255)|(0 ,0 ,0 )|(0 ,0 ,0 )|
任何建议我从哪里开始? SVG中是否可能实现这一点? 我知道我可以在SVG中的滤镜中创建矩阵乘法,但我不知道如何解决这个问题。 谢谢!
编辑1: 我在数学交换中发布的相关问题: https:// math.stackexchange.com / questions / 2087482 / creating-binary-matrix-for-threshold-as-a-result-of-matrix-multiplcation 编辑2:从Snap.svg代码中提取:此矩阵将将彩色图像转换为灰度:
<feColorMatrix type="matrix" values="0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0"/>
我希望将这里的灰度值修改为黑白。我想选择阈值,使得高于该值的返回为白色,低于该值的返回为黑色。
附加信息: 根据MSDN的说明,乘法是按以下方式进行的:
Resulting vector my coveted matrix original vector
| R' | | a00 a01 a02 a03 a04 | | R |
| G' | | a10 a11 a12 a13 a14 | | G |
| B' | = | a20 a21 a22 a23 a24 | * | B |
| A' | | a30 a31 a32 a33 a34 | | A |
| 1 | | 0 0 0 0 1 | | 1 |
这反过来应用于输入图像的每个像素。