从 intel realsense 到 matlab 的 RGBa 图像
Posted
技术标签:
【中文标题】从 intel realsense 到 matlab 的 RGBa 图像【英文标题】:RGBa image from intel realsense to matlab 【发布时间】:2015-06-15 21:34:50 【问题描述】:我正在尝试将帧从英特尔实感相机发送到 matlab。 d通过 imshow(...) 或 image(...) 显示图像没有成功,因为图像是 rgba 图像... 我已从 C# 将图像作为对象发送:
matlab.Feval("getImage", 1, out result, bitmap_data);
有没有可以显示边框的功能?
【问题讨论】:
【参考方案1】:您将不得不使用确切的 Feval 实现,但如果您要直接在 matlab 中执行它,则有两种选择
1.直接忽略alpha通道
%this says show all rows, all cols, for channels 1 through 3 or R,G,B
imshow(rgba_im(:,:,1:3));
2.使用alpha channel
%this says show all rows, all cols, for channels 1 through 3 or R,G,B
%also saves the handle to the newly drawn image
hndl = imshow(rgba_im(:,:,1:3));
%isolates alpha channel
alpha = rgba_im(:,:,4);
%displays alpha channel
set(hndl , 'AlphaData', alpha);
编辑
现在我知道你的数据不是标准的 rgba 格式,这里是修复它的代码,cmets 应该告诉你你需要的一切
[num_rows,num_cols_x4]=size(rgba_matrix);
%we have to transpose the array to get it to unfold properly, which is
%first by columns, then rows
at = rgba_matrix.';
%converts data from [r1 g1 b1 a1 r2 g2 b2 a2 r3 g3 b3 a3....] to
% red_chan = [r1 r2 r3...]
% green_chan = [g1 g2 g3...]
% blue_chan = [b1 b2 b3...]
% alpha_chan = [a1 a2 a3...]
% it says start at some index and grab every 4th element till the end of the
% matrix
red_chan = at(1:4:end);
grn_chan = at(2:4:end);
blu_chan = at(3:4:end);
alp_chan = at(4:4:end);
% reshape each channel from one long vector into a num_rows x (num_cols_x4/4)
red_chan = reshape(red_chan, num_cols_x4/4, num_rows).';
grn_chan = reshape(grn_chan, num_cols_x4/4, num_rows).';
blu_chan = reshape(blu_chan, num_cols_x4/4, num_rows).';
alp_chan = reshape(alp_chan, num_cols_x4/4, num_rows).';
% we concatenate the channels into a num_rows x (num_cols_x4/4) x 4 matrix
standard_rgba = cat(3,red_chan,grn_chan,blu_chan,alp_chan);
从这一点开始,您可以使用standard_rgba
数组进行我建议的处理。编写此代码可能有更有效的方法,但我想让它尽可能清晰易懂,希望对您有所帮助
【讨论】:
嘿@andrew,发送到matlab的对象是一个以这种方式构造的数组:[R,G,B,A,R,G,B,A,R,G,B, A.....],红色矩阵的第一位,绿色矩阵的第一位,蓝色矩阵的第一位和阿尔法矩阵的第一位......所以我必须要复习一下吗?数组并构造矩阵还是在matlab中有更聪明的方法?提前致谢!! @MarounSassine 我添加了一些代码来将您的矩阵转换为标准 rgba 格式。我假设如果您的图像是MxN
,那么您的 rgba 矩阵是 Mx(N*4)
,因为每一列都扩展为 r、g、b、a。希望这会有所帮助
@我去看看。非常感谢!!
@MarounSassine - 这对你有用吗?而且我认为您的意思是“红色矩阵的第一个像素值”而不是“红色矩阵的第一位”...
@andrew - 另一种解决方案是使用standard_rgba=shiftdim(reshape(original_RGBA,4,height,width),1)
以上是关于从 intel realsense 到 matlab 的 RGBa 图像的主要内容,如果未能解决你的问题,请参考以下文章
从 fpga 控制的最佳深度相机是啥? intel realsense vs kinect v1 vs kinect v2?
使用 Intel RealSense D435 点云制作 3D 扫描模型
使用 Intel Realsense D415 进行物体识别