怎样理解 ImageRecolor 的这一行为?
mathematica吧
全部回复
仅看楼主
吧务
level 15
xzcyr 楼主
最近试着玩了一下 ImageRecolor ,然后玩着玩着玩出问题来了……考虑下面这个简例:
tst=Image[RawArray["UnsignedInteger8", ConstantArray[{42, 69, 96}, {27, 27}]], "Byte",
ColorSpace -> "RGB", Interleaving -> True]
如大家所见这是一个纯色小方块。我们试着把它换成红的:
ImageRecolor[tst,RGBColor[{42,69,96}/256]->Red]
……咋回事?能靠调选项解决吗?( ColorReplace 就算了。)
2020年09月05日 08点09分 1
level 7
文档里有一句
“ColorReplace 用精确颜色替换颜色区域”,“默认情况下,ImageRecolor 保留替换颜色的明度”,可能和这个有关。
虽然解释不了,不过可以做一些实验:
a = RandomReal[{0, 1}, 3]
b = ImageData[ImageRecolor[Image[{{a}}], RGBColor@璐村惂鐢ㄦ埛_00000eP馃惥 -> Red]]
可以看出b[[1,1,1]]==Max[a]
2020年09月05日 13点09分 2
"ImageRecolor 保留替换颜色的明度" 这句倒还好理解。把颜色换到HSB空间后会发现B(明度,三元数组的第三个数)在替换前后是不变的,但H和S被换成了Red的相应参数。可是难以理解的是,ImageRecolor给了6个选项,你可以只变HSB其中之一,也可以保留其中之一,唯独不能全换……为什么啊。
2020年10月03日 08点10分
@xzcyr 不能全换也好理解吧,ImageRecolor相当于把一组颜色替换成另一组,原始颜色总要留一个参数做参照
2020年10月03日 14点10分
@hjq447285628 ……可能真是我想错了。我原本以为 ImageRecolor 换颜色能换得这么自然是因为它有一套比较高明的近似替换逻辑(把相近的颜色按一定规则替换之类的),仔细想来,说不定 ImageRecolor 的结果会这么柔和,大半是因为它换的时候会至少保留HSB之一?……不过该怎么验证这猜想呢……
2020年11月07日 07点11分
1