首页 文章

根据像素值范围创建图像蒙版

提问于
浏览
0

我需要掩饰我的形象 . 所有像素的值都不是

R = 170-220 G = 100-150 B = 60-100

应该被掩盖为黑色 .

可以通过循环和查找像素值来完成它,如果它超出R或G或B的范围,则用黑色像素替换它,否则保持其原始值,但是它花费了很多 . 如何避免if循环功能 . matlab中是否有内置函数?

2 回答

  • 2

    您可以使用Matlab的逻辑索引功能 . 它允许您根据不同的逻辑语句索引数组(包括基于数组元素值本身的逻辑语句) .

    Image = imread('ImageName.extension');
    %Read Image
    
    R_Channel = Image(:,:,1);
    G_Channel = Image(:,:,2);
    B_Channel = Image(:,:,3);
        %Isolate Colour Channels.
    
        %R=170-220 G=100-150 B=60-100
    
        %Logical Indexing
    R_Channel(R_Channel < 170 | R_Channel > 220)  = 0;   %Black Mask
    G_Channel(G_Channel < 100 | G_Channel > 150)  = 0;   %Black Mask
    B_Channel(B_Channel < 60  | B_Channel > 100)  = 0;   %Black Mask
        %Apply constraint on each Channel
    
    MaskedImage = cat(3,R_Channel,G_Channel,B_Channel);
        %Merge all Colour channel to get the masked Image
    
  • 2

    改为使用逻辑索引 . 例如 R Channels :

    R = img(:,:,1);
    R_Constraint = R >= 170 && R <= 220;
    R(R_Constraint) = 1;
    R(~R_Constraint) = 0;
    

    分别为 GB 执行此操作 . 然后,使用逐个元素并将最终结果作为黑白图像 .

    G = img(:,:,2);
    G_Constraint = G >= 100 && G <= 150;
    G(G_Constraint) = 1;
    G(~G_Constraint) = 0;
    
    B = img(:,:,3);
    B_Constraint = B >= 60 && B <= 100;
    B(B_Constraint) = 1;
    B(~B_Constraint) = 0;
    
    img = R & G & B;
    img(img == 1) = 255;
    img = uint8(img);
    

相关问题