Matlab 在灰度图像上为河流着色
试图把一条河从黑色漆成黄色,我遇到了一个“小”问题 在这个问题上给出的图像是一张地图的简单灰度图像,上面有一条河()。 任务是将这条河从黑色(0,0,0)漆成黄色(255255,0) 据我所知,如果不将灰度图像“转换”为RGB,我们实际上无法绘制灰度图像,因此我所做的是:Matlab 在灰度图像上为河流着色,matlab,image-processing,Matlab,Image Processing,试图把一条河从黑色漆成黄色,我遇到了一个“小”问题 在这个问题上给出的图像是一张地图的简单灰度图像,上面有一条河()。 任务是将这条河从黑色(0,0,0)漆成黄色(255255,0) 据我所知,如果不将灰度图像“转换”为RGB,我们实际上无法绘制灰度图像,因此我所做的是: 得到了图像 使用imread()来“读取”图像 使用函数cat连接我的图像(显然“变成”RGB图像?) 循环检查图像的每个部分,并检查哪些部分的值在0到48之间(根据我所读到的内容,有不同的黑色阴影,显然是从8到8,比如(0,
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)
originalIM_River=imread('fig_lista4_2.bmp');
图,标题(“原始图像”),imshow(原始阿利姆河)
imRGB_河=cat(3,originalIM_河,originalIM_河,originalIM_河);
[nLine,N柱]=尺寸(imRGB_河);
对于i=1:nLine
对于j=1:n列
如果imRGB_河(i,j)>=0&&imRGB_河(i,j)则错误在于此行:
[nLine, nColumn] = size(imRGB_River);
这里,imRGB_River
是一个三维矩阵,3是第三维的大小。由于您只从函数中请求2个维度,它将返回上一次输出中所有非单例尾随维度的乘积,因此nColumn
将返回为N*3
,或比您预期的大三倍。要修复它,您可以使用原始图像矩阵(在复制第三维之前):
或按如下方式调用size
:
错误在于这一行:
[nLine, nColumn] = size(imRGB_River);
这里,imRGB_River
是一个三维矩阵,3是第三维的大小。由于您只从函数中请求2个维度,它将返回上一次输出中所有非单例尾随维度的乘积,因此nColumn
将返回为N*3
,或比您预期的大三倍。要修复它,您可以使用原始图像矩阵(在复制第三维之前):
或按如下方式调用size
:
我对Matlab一无所知,但我猜你在cat
ed两个额外通道时创建了一个3倍于原始宽度的图像。我的意思是,你的图像在像素方面变得更宽,而不是在通道方面变得更深。我检查了MatLab窗口的左侧,注意到它从1024x1026变为1024x2591x3,试图找出解决方法。我猜您的原始图像已经是RGB,而不是单通道。因此,您可能需要使用一个带有原始Alim_River(:,:,1)
的单一通道,或者强制imread()
以灰度加载。我对Matlab一无所知,但我猜您在cat
加载两个额外通道时创建了一个3倍于原始宽度的图像。我的意思是,你的图像在像素方面变得更宽,而不是在通道方面变得更深。我检查了MatLab窗口的左侧,注意到它从1024x1026变为1024x2591x3,试图找出解决方法。我猜您的原始图像已经是RGB,而不是单通道。因此,您可能只需要使用带有原始Alim_River(:,:,1)
的单个通道,或者强制imread()
以灰度加载。
[nLine, nColumn, ~] = size(imRGB_River);