给定MATLAB中的像素位置改变像素颜色

时间:2014-09-06 19:14:22

标签: matlab image-processing

我有一个JPEG图像,我想改变图像中3个相邻像素的颜色,例如蓝色。假设给出了这些像素的位置,如(10,10), (10,11), (10,12)

我们如何在MATLAB中做到这一点?

1 个答案:

答案 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将是您要查找的行,col1col2将是您要更改内容的开始和结束列,[c1 c2 c3]将是您想要将这些位置设置为的RGB组件的元组。 c1是红色组件,c2是绿色组件,c3是蓝色组件。上面的代码将独立于您想要设置的列数,只要您当然不在图像之外!