MATLAB:如何'着色'灰度图像序列的像素?

时间:2013-11-28 17:11:05

标签: matlab annotations video-processing

假设我有像素的线性索引,我想'着色'。

如果我想将所有这些像素设置为我的灰度图像序列中的某个特定值,我可以这样做:

gryscl_imSeq(LinearPixIndx) = 0.7;

编辑:其中'LinearPixIndx'是一个p元素向量,包含图像序列中像素的线性索引。

但是,如果我想介绍一些颜色,我首先需要将我的灰度图像序列转换为m x n x 3 x p矩阵,我可以这样做:

RGBvideo = reshape(repmat(reshape(gryscl_imSeq,[],size(gryscl_imSeq,3)),3,1),...
         [size(gryscl_imSeq,1) size(gryscl_imSeq,2) 3 size(gryscl_imSeq,3)]);

如果有人能告诉我如何将我的灰度线性像素索引转换为RGBvideo的相应索引,我将非常感激。

或者,如果有更好的方法可以解决我想做的事情,我将非常感谢任何建议。

先谢谢,

<磷>氮

1 个答案:

答案 0 :(得分:1)

问题不是很清楚,但我想我明白你想要什么。这是一种方法。

首先,我认为从灰度转换为RGB有一种更优雅的方式:

% determine image sequence dimensions
[m, n, N] = size(gryscl_imSeq);
% expand to RGB
rgb_imSeq = reshape(gryscl_imSeq, [m, n, 1, N]);
rgb_imSeq = repmat(rgb_imSeq, [1, 1, 3, 1]);

之后,为了能够将线性索引应用于所有颜色通道和所有帧,您需要通过重新整形显式线性化像素索引。然后你可以为像素着色,然后转换回形式宽度x高度x颜色通道x帧:

% linearize image dimensions
rgb_imSeq = reshape(rgb_imSeq, [m * n, 3, N]);
% color pixels
rgb_imSeq(LinearPixIndx, :, :) = repmat([1 0 0], [numel(LinearPixIndx), 1, N]);
% original shape
rgb_imSeq = reshape(rgb_imSeq, [m, n, 3, N]);

此处[1 0 0]是您要使用的颜色的RGB表示形式,在本例中为红色。