如何在MATLAB中分割后获得图像的原始颜色?

时间:2016-05-18 14:22:32

标签: image matlab colors

我想知道是否有办法在MATLAB中找回图像的原始颜色? color.bmp是一个彩色图片,经过分割和设置几个像素到 0 之类的操作后,只是为了从我的图片中删除它们,我想用其他图形“着色”他们原来的颜色。我知道原始图像的原始RGB值。原始图片看起来像pic 2。然后我只留下黄色字母

i = imread('zestaw3_12.bmp'); 
o1 = im2double(i); 
% obliczanie kolorów
r = 224/255;
g = 220/255;
b = 51/255;

t = 0.1; 
sr = o1(:,:,1) < r + t & o1(:,:,1) > r - t;
sg = o1(:,:,2) < g + t & o1(:,:,2) > g - t;
sb = o1(:,:,3) < b + t & o1(:,:,3) > b - t;
segm = sr & sg & sb; 
se2 = [0 1 0 ; 1 1 1 ; 0 1 0]; 
segm2 =imopen(segm,se2);
segm3 = imclose(segm2,se2); 

这里我删除了触摸框架字母并使用 regionprops 功能删除了我不想再看的字母,这就是结果1。我得到的是 im_ok 逻辑,它显示在图片1。最后,我想将那些F,D和E字母的颜色重新设置为原始图片中的黄色。enter image description here

enter image description here

1 个答案:

答案 0 :(得分:2)

如果您有原始图像,首先将其加载到MATLAB中,然后使用蒙版设置等于0的像素,无论原始图像中的对应位置如何。假设原始图像存储在original.bmp中,并且分割的图像存储在color.bmp中,只需执行以下操作:

im_orig = imread('original.bmp');
im = imread('color.bmp');
mask = all(im == 0, 3);
im(mask) = im_orig(mask);

前两个语句将两个图像加载到MATLAB工作区。关键声明是倒数第二个。它找到一个逻辑掩码,其中分段图像中的每个红色,绿色,蓝色(即RGB = (0,0,0))的通道都为0的任何位置,这些位置设置为true,而其余位置设置为false。函数all帮助我们确保图像中每个空间位置的所有通道值都等于0。

然后我们使用此蒙版直接索引到分割图像中,并从原始图像中的彩色像素复制到分割图像中设置为黑色的位置。