我想知道是否有办法在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字母的颜色重新设置为原始图片中的黄色。
答案 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。
然后我们使用此蒙版直接索引到分割图像中,并从原始图像中的彩色像素复制到分割图像中设置为黑色的位置。