微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在不使用cat3,R,G,B函数的情况下串联3个RGB通道

如何解决如何在不使用cat3,R,G,B函数的情况下串联3个RGB通道

我有一个RGB图像,我试图在不使用内置函数imcomplement(A)的情况下对其进行补充。

R=A(:,:,1);% A is the input image
G=A(:,2);
B=A(:,3);
[r,c]=size(B);
for i=1:1:r
    for j=1:1:c
        R(i,j)=255-R(i,j); 
        G(i,j)=255-G(i,j);
        B(i,j)=255-B(i,j);
    end
end
new=cat(3,R,G,B);

解决方案可提供预期的输出

如何在不使用cat函数的情况下做同样的事情?这是我目前未成功的尝试:

[r,c]=size(B);
new=zeros(size(A,1),size(A,2),'uint8');
for i=1:1:r
    for j=1:1:c
        for k=1:1:1
            new(i,j,k)=(255-G(i,j));
        end
    end
end

解决方法

@Pascal所述,最直接的解决方案是

new = intmax('uint8') - A;

如果您坚持使用循环(在这种情况下,我强烈建议您使用 ),则这些循环应该有效:

[r,c,s] = size(A);
new = zeros(r,s,'uint8'); % alternatively: zeros(r,'like',A);
for iR = 1:r % the middle :1: is implied
  for iC = 1:c
    for iS = 1:s % s stands for "slice"
      new(iR,iC,iS) = intmax('uint8') - A(iR,iS);
    end
  end
end
for iR = 1:r
  for iC = 1:c
    new(iR,1) = intmax('uint8') - R(iR,iC);
    new(iR,2) = intmax('uint8') - G(iR,3) = intmax('uint8') - B(iR,iC);
  end
end

如您所见,以上所有解决方案均未使用您要避免的cat函数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。