在灰度图像上为河流着色

时间:2017-11-22 17:02:02

标签: matlab image-processing

尝试将河流从黑色涂成黄色,我遇到“小”问题。

这个问题的图像是一张地图的简单灰度图像,上面有一条河(original image)。 任务是将这条河“画”成黑色(0,0,0)到黄色(255,255,0)。

据我所知,我们实际上无法在不将其“转换”为RGB的情况下绘制灰度图像,所以我做了:

  1. 得到了图片,
  2. 使用 imread()
  3. “读取”图像
  4. 使用函数 cat 连接我的图像(显然“转”成RGB图像?),
  5. 在我的图像的每个部分循环并检查哪些值在0到48之间(根据我读到的,有不同的黑色阴影,显然它从8到8像(0,0,0),( 8,8,8)等)
  6. 如果该范围内有值,我会将其涂成黄色(255,255,0)
  7. 问题在于,不仅河流被涂成了黄色,而且在图像的右侧添加了一个相对较大的黄色方块。我会在代码后面发布图片。

    originalIM_River = imread('fig_lista4_2.bmp');
    figure,title('Original image'),imshow(originalIM_River)
    
    imRGB_River = cat(3, originalIM_River, originalIM_River, originalIM_River);
    [nLine, nColumn] = size(imRGB_River);
    
    for i = 1 : nLine
        for j = 1 : nColumn
            if imRGB_River(i,j) >= 0 && imRGB_River(i,j) <= 48
                imRGB_River(i,j,:) = [255,255,0]; % (255,255,0) is yellow
            end
        end
    end
    
    figure, title('New imagem - River painted with yellow'),imshow(imRGB_River)
    

    River painted with yellow

    我试图将每个通道与图像(红色,绿色,蓝色)分开,找出哪些像素在0到48范围内并将其涂成黄色以便稍后将它们连接起来,但这也不起作用。

1 个答案:

答案 0 :(得分:0)

错误在于这一行:

[nLine, nColumn] = size(imRGB_River);

这里imRGB_River是一个三维矩阵,其中3是第三维的大小。由于您只从size函数请求2个维度,因此它将返回上一个输出中所有非单例尾随维度的产品,因此nColumn将返回{{ 1}},或者比你预期的大三倍。要修复它,您可以使用原始图像矩阵(在复制第三维之前):

N*3

或致电ignore additional output dimensions如下[nLine, nColumn] = size(originalIM_River);

size