MATLAB -通过应用蒙版改变图像的一部分的颜色

a6b3iqyw  于 2023-08-06  发布在  Matlab
关注(0)|答案(1)|浏览(179)

我得到了这个彩色图像,并通过对象检测获得了以下遮罩。我想将此蒙版应用于原始图像,以将固体的颜色更改为我喜欢的颜色(或对它们应用任何效果,这并不重要)。我做不到。
我试过创建一个函数来迭代原始图像的每个像素,并将其与蒙版进行比较,但这不是一个有效的解决方案。
掩码为 logical 类型,而图像为 uint8
100d1x

的字符串

beq87vna

beq87vna1#

下面是一些丑陋的图片,但希望也是一个有启发性的例子:

% Create dummy image
x = 0:4:255;

origimage = uint8(repmat(x,64,1));
origimage(:,:,2) = 100;
origimage(:,:,3) = 100;

% create dummy mask
colormask = logical(zeros(64,64));
colormask(1:20,30:50) = 1;

% display original image and mask

figure(1);image(origimage);
figure(2); imagesc(colormask);

% create altered image

newimage = origimage;
newimage(colormask) = 255; %changes first channel to 255 in masked pixels
figure(3); image(newimage);

字符串


的数据
由于colormask是一个逻辑,您可以直接使用它来选择原始图像中的相关像素,并在一个命令中修改它们。希望这对你有帮助。

**2023年7月12日添加,以回应有关更改其他频道的评论:

您可以灵活地更改其他频道。我的原始代码只改变了红色通道,因为我的面具只有2D。

% change all three channels together

colormask2 = logical(zeros(64,64,3));
colormask2(1:20,30:50,1:3) = 1;

newimage2 = origimage;
newimage2(colormask2) = 200;


替代和更灵活的方法:

%create 3D mask with different numbers for each channel
colormask3 = uint8(zeros(64,64,3));
colormask3(1:20,30:50,1) = 1;
colormask3(1:20,30:50,2) = 2;
colormask3(1:20,30:50,3) = 3;
        
newimage4 = origimage;
newimage4(logical(colormask3)) = 200; %gives same image as prior example
figure(4); image(newimage4);
        
newimage5 = origimage;
newimage5 = newimage5 + 10*colormask3; %adds 10 to red, 20 to green, 30 to blue
figure(5); image(newimage5);
        
%  add to the original image itself *1/2 for red, *1 for green, and *1.5
%  for blue
newimage6 = origimage + origimage.*colormask3/2;
figure(6); image(newimage6);

相关问题