【问题标题】:How to obtain the original colors of an image after segmentation in MATLAB? [duplicate]如何在MATLAB中获得图像分割后的原始颜色? [复制]
【发布时间】:2016-09-15 02:33:31
【问题描述】:

我想知道是否有任何方法可以在 MATLAB 中恢复图像的原始颜色? color.bmp 是彩色图像,经过分割和将几个像素设置为 0 等操作只是为了从我的图像中删除它们,我想用原始图像“着色”其余的图形颜色。我确实知道原始图像中的原始 RGB 值。原始图片看起来像图片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 字母涂成黄色,就像原来的图片一样。

【问题讨论】:

    标签: image matlab colors


    【解决方案1】:

    如果您有原始图像,请先将其加载到 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 工作区中。关键语句是倒数第二个。它找到一个逻辑掩码,其中分割图像中的任何位置,其中每个红色、绿色、蓝色的通道都为 0(即RGB = (0,0,0)),这些位置设置为true,而其余位置设置为false。函数 all 在这里帮助我们确保图像中每个空间位置的所有通道值都等于 0。

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

    【讨论】:

    • 谢谢你的回答,但也许我做错了什么,但它对我不起作用。在 original.bmp 中有不同颜色的字母。我需要做的就是从这张图片中删除所有非黄色,我在这里使用分割。然后我需要删除其中的一些并使用 regionprops 函数来完成它。在此操作之后,我收到 im_all 作为逻辑,我想将其重新着色为黄色。我想制作另一个 sth.bmp 文件,用我想要的颜色填充它,然后在转换为 double 后将我的 im_all 倍增,但听起来很蹩脚.. .
    • 请给我看(1)你写的代码。 (2) 图像本身。从您的帖子中很难确定您实际上在做什么。现在据我了解,您真正想要的实际上并不是您在原始问题中提出的问题。请相应地编辑您的问题。
    • 好吧,这与您提出的要求完全不同。您基本上想找到给定蒙版的图像的原始颜色。我标记为重复。
    • 非常感谢,它有效:)
    猜你喜欢
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 2012-06-07
    • 2011-08-02
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多