更改RGB图像中多个像素的值

时间:2016-02-16 13:37:42

标签: image matlab matrix rgb

我必须更改RGB图像中的像素值。 我有两个表示位置的数组,所以:

protected override async void OnShareTargetActivated(ShareTargetActivatedEventArgs args)
    {
        ShareOperation shareOperation = args.ShareOperation;
        //Can't make any navigation
    }

我会在没有循环的情况下操作此修改。如此直观地说,为了在这些位置设置红色,我写道:

rows_to_change = [r1, r2, r3, ..., rn];
columns_to_change = [c1, c2, c3, ..., cn];

此代码行返回错误。

如何在不使用双循环的情况下操作此更改?

2 个答案:

答案 0 :(得分:3)

您可以使用sub2ind,但每个频道的工作更容易:

red = image(:,:,1);
green = image(:,:,2);    
blue = image(:,:,3);

将行和列索引(即下标索引)转换为线性索引(每个2D通道):

idx = sub2ind(size(red),rows_to_change,columns_to_change)

设置每个通道的颜色:

red(idx) = 255;
green(idx) = 0;
blue(idx) = 0;

连接通道以形成彩色图像:

new_image = cat(3,red,green,blue)

答案 1 :(得分:1)

如果你真的不想分开频道,你可以使用这些代码,但这样做绝对会更复杂:

%your pixel value
rgb=[255, 0, 0]
%create a 2d mask which is true where you want to change the pixel
mask=false(size(image,1),size(image,2))
mask(sub2ind(size(image),rows_to_change,columns_to_change))=1
%extend it to 3d
mask=repmat(mask,[1,1,size(image,3)])
%assign the values based on the mask.
image(mask)=repmat(rgb(:).',numel(rows_to_change),1)

我最初提出这个想法的主要原因是图像具有可变数量的通道。