首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Matlab中移植SVG合成标准的问题

在Matlab中移植SVG合成标准的问题
EN

Stack Overflow用户
提问于 2019-06-04 22:22:54
回答 1查看 56关注 0票数 0

我已经将来自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;

代码语言:javascript
复制
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;
end

if Sca == Sa & Dca == 0中出错

||和&&运算符的操作数必须可转换为逻辑标量值

EN

回答 1

Stack Overflow用户

发布于 2019-09-28 18:42:50

一个freelancer.com项目提出了以下建议,它比arrayfun版本快大约10+倍,但如果5+可以像大多数其他情况一样直接使用SVG标准中的语法,则比人们预期的要慢。

代码语言:javascript
复制
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;
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56445876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档