我已经将来自SVG组合标准(2009,https://www.w3.org/TR/2009/WD-SVGCompositing-20090430/)的24种方法中的大多数方法移植到Matlab语言中,但有四种方法(如颜色减淡)依赖于if语句中的图像比较(如:if Sca == Sa && Dca == 0 ...)但Matlab认为这是非标量运算符。
Sc、Dc是RGB图像Sa、Da是表示α通道的灰色掩模Dca、Sca是预乘图像: Dca = Dc .* Da;Sca = Sc .* Sa;
if strcmp(compo_meth, 'color-dodge') == 1;
if Sca == Sa && Dca == 0
Dca = (1 - Da) .* Sca;
elseif Sca == Sa
Dca = Sa .* Da + (1 - Da) .* Sca + (1 - Sa) .* Dca;
elseif Sca < Sa
Dca = Sa .* Da .* min(1, Dca/Da .* Sa/(Sa - Sca));
end
Da = Sa + Da - Sa .* Da;
endif Sca == Sa & Dca == 0中出错
||和&&运算符的操作数必须可转换为逻辑标量值
发布于 2019-09-28 18:42:50
一个freelancer.com项目提出了以下建议,它比arrayfun版本快大约10+倍,但如果5+可以像大多数其他情况一样直接使用SVG标准中的语法,则比人们预期的要慢。
if strcmp(compo_meth, 'color-dodge') == 1
rc = (Sca == Sa) & (Dca == 0);
Dca(rc) = (1 - Da(rc)) .* Sca(rc);
rc1 = (Sca == Sa) & (Dca ~= 0);
Dca(rc1) = Sa(rc1) .* Da(rc1) + (1 - Da(rc1)) .* Sca(rc1) + (1 - Sa(rc1)) .* Dca(rc1);
rc2 = (Sca < Sa);
Dca(rc2) = Sa(rc2) .* Da(rc2) .* min(1, Dca(rc2)./Da(rc2) .* Sa(rc2)./(Sa(rc2) - Sca(rc2)));
Da = Sa + Da - Sa .* Da;
endhttps://stackoverflow.com/questions/56445876
复制相似问题