我有一个JPEG图像,我想改变图像中3个相邻像素的颜色,例如蓝色。假设给出了这些像素的位置,如(10,10), (10,11), (10,12)
。
我们如何在MATLAB中做到这一点?
答案 0 :(得分:2)
您可以通过编制索引来实现。假设您的图片存储在im
中,并且您已通过imread
阅读了该图片。假设您的图片是彩色的并且类型为uint8
,您只需执行此操作:
im(10,10:12,1) = 0;
im(10,10:12,2) = 0;
im(10,10:12,3) = 255;
这将改变第10行第10-12列的像素,并修改每个颜色平面,使红色通道为0,绿色通道为0,蓝色通道为255.这将有效地使这些像素处于三个地点蓝色。
但是,如果您的图像只是灰度和单个2D矩阵,则需要在执行上述操作之前创建颜色版本。这可以简单地通过复制每个通道的每个图像来完成。换句话说:
im = cat(3,im,im,im);
然后,您可以使用im
并为您想要的任何像素着色。
如果你想使这个矢量化,你当然可以使用repmat
:
im(10,10:12,:) = repmat([0 0 255], 3, 1);
这将获得与上述相同的结果。
通常,如果要对任何一行和可变数量的列位置执行此操作,您可以这样做:
im(row,col1:col2,:) = repmat([c1 c2 c3], col2 - col1 + 1, 1);
row
将是您要查找的行,col1
和col2
将是您要更改内容的开始和结束列,[c1 c2 c3]
将是您想要将这些位置设置为的RGB组件的元组。 c1
是红色组件,c2
是绿色组件,c3
是蓝色组件。上面的代码将独立于您想要设置的列数,只要您当然不在图像之外!