首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RGB到规范rgb转换。矢量化

RGB到规范rgb转换。矢量化
EN

Stack Overflow用户
提问于 2011-10-23 11:33:16
回答 2查看 3.8K关注 0票数 3

我正在编写一段代码,它必须从RGB图像转换为rgb规范化空间。我已经让它与一个for格式工作,但它运行太慢,我需要评估很多图像。为了加快速度,我尝试将整个函数矢量化。我现在有以下几点:

代码语言:javascript
复制
     R = im(:,:,1);
     G = im(:,:,2);
     B = im(:,:,3);

     r=reshape(R,[],1);
     g=reshape(G,[],1);
     b=reshape(B,[],1);

     clear R G B;

     VNormalizedRed = r(:)/(r(:)+g(:)+b(:));
     VNormalizedGreen = g(:)/(r(:)+g(:)+b(:));
     VNormalizedBlue = b(:)/(r(:)+g(:)+b(:));

     NormalizedRed = reshape(VNormalizedRed,height,width);
     NormalizedGreen = reshape(VNormalizedGreen,height,width);
     NormalizedBlue = reshape(VNormalizedBlue,height,width);

主要问题是,当到达VNormalizedRed = r(:)/(r(:)+g(:)+b(:));时,它会显示内存不足的错误(wich非常奇怪,因为我刚刚释放了三个相同大小的向量)。是错误吗?(解决了)

是否有可能以更有效的方式进行同样的工作?

编辑:

在使用Martin sugestions之后,我发现没有必要使用reshape函数,因为它能够对一个简单的代码进行同样的操作:

代码语言:javascript
复制
     R = im(:,:,1);
     G = im(:,:,2);
     B = im(:,:,3);

     NormalizedRed = R(:,:)./sqrt(R(:,:).^2+G(:,:).^2+B(:,:).^2);
     NormalizedGreen = G(:,:)./sqrt(R(:,:).^2+G(:,:).^2+B(:,:).^2);
     NormalizedBlue = B(:,:)./sqrt(R(:,:).^2+G(:,:).^2+B(:,:).^2);

     norm(:,:,1) = NormalizedRed(:,:);
     norm(:,:,2) = NormalizedGreen(:,:);
     norm(:,:,3) = NormalizedBlue(:,:);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-23 11:38:06

我相信你想

代码语言:javascript
复制
VNormalizedRed = r(:)./(r(:)+g(:)+b(:));

注意/前面的点,它指定一个元素的除法.如果没有这个点,你就是在解一个方程组--这很可能不是你想要做的。这可能也解释了为什么你会看到高内存消耗。

票数 5
EN

Stack Overflow用户

发布于 2011-10-23 23:58:19

可以用一条矢量化行重写整个第一段代码:

代码语言:javascript
复制
im_normalized = bsxfun(@rdivide, im, sum(im,3,'native'));

您的第二个稍微修改的版本如下:

代码语言:javascript
复制
im_normalized = bsxfun(@rdivide, im, sqrt(sum(im.^2,3,'native')));

顺便说一句,您应该知道用于图像的数据类型,否则可能会得到意想不到的结果(例如,由于整数除法)。因此,在执行规范化计算之前,我会将图像转换为double

代码语言:javascript
复制
im = im2double(im);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7865866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档