【问题标题】:Lookup table based on input image color in matlabmatlab中基于输入图像颜色的查找表
【发布时间】:2015-08-07 13:08:38
【问题描述】:

假设我有两个输入图像。一个只包含绿色、红色和蓝色三种颜色作为标签。需要根据第一张图像中的颜色编辑的另一张图像。因此,例如,无论标签图像是红色的,我都希望函数 A 发生在原始图像上。

为此,我想创建一个查找,将颜色作为输入并输出要在原始图像上执行的函数。

最好的方法是什么?

【问题讨论】:

    标签: matlab colors lookup-tables


    【解决方案1】:

    您可以为此使用logical indexing

    im1 = [0 0 1; 
           1 2 0; 
           2 2 1];
    im2 = rand(3);
    

    找出im1等于1的地方:

    idx = im1 == 1;
    

    idx 现在是一个逻辑矩阵,可以作为im2 的掩码:

    idx = 
    
        0   0   1
        1   0   0
        0   0   1
    

    im2的所有对应像素做点什么:

    im2(idx) = im2(idx) + 5;
    

    另外,虽然我怀疑这是您要问的,但您可以使用 anonymous functions 定义您的函数 A

    A = @(x)(2.*x.^2 - x + 5)
    im2(idx) = A(im2(idx))
    

    【讨论】:

    • 感谢您的回答。尽管我主要是在询问为此创建一个查找表,但我需要深入研究一下,因为在实际代码中,我将拥有比 3 个更多的颜色标签。此外,在处理颜色标签时,它总是更好吗将输入标签图像从 rgb 转换为索引? (当我通过 rgb2ind 执行此操作时,我在标签边框上得到了一些伪影,没有抖动!)
    • 丹,快速提问。如果我想在图像中找到不完全是 0.9 的值范围,我该怎么做?我尝试了idx = im2(:,:,1) == (abs(im2(:,:,1) - 0.9)<=epsilon),但它并没有按预期工作。只是检索了一些像素。想法?
    • 实际上得到了它的工作。而不是 == 不得不放
    • 丹,我有一个问题。当我执行im2(idx) = im2(idx) + 5; 之类的操作时,似乎只在红色通道中添加了 5!知道可能是什么原因造成的吗?谢谢
    • 你说你的颜色是标签,所以我认为它不是 RGB 图像。如果您的 RGB 图像具有正确的索引(并且获取方式略有不同),则将掩码应用于您需要分别获取行和列索引的所有通道(例如[ri, ci] = find(...))然后应用它@ 987654337@。但这与您提出的问题不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 2020-02-12
    • 2017-03-14
    • 2014-10-30
    • 2017-07-24
    • 1970-01-01
    相关资源
    最近更新 更多