我需要掩饰我的形象 . 所有像素的值都不是
R = 170-220 G = 100-150 B = 60-100
应该被掩盖为黑色 .
可以通过循环和查找像素值来完成它,如果它超出R或G或B的范围,则用黑色像素替换它,否则保持其原始值,但是它花费了很多 . 如何避免if循环功能 . matlab中是否有内置函数?
您可以使用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
改为使用逻辑索引 . 例如 R Channels :
R
R = img(:,:,1); R_Constraint = R >= 170 && R <= 220; R(R_Constraint) = 1; R(~R_Constraint) = 0;
分别为 G 和 B 执行此操作 . 然后,使用逐个元素并将最终结果作为黑白图像 .
G
B
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);
2 回答
您可以使用Matlab的逻辑索引功能 . 它允许您根据不同的逻辑语句索引数组(包括基于数组元素值本身的逻辑语句) .
改为使用逻辑索引 . 例如
R
Channels :分别为
G
和B
执行此操作 . 然后,使用逐个元素并将最终结果作为黑白图像 .