如何在不使用 cat(3,R,G,B) 函数的情况下连接 3 个 RGB 通道
How to concatenate 3 RGB channels without using the cat(3,R,G,B) function
我有一个 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
如所述,最直接的解决方案是
new = intmax('uint8') - A;
如果您坚持使用循环(在这种情况下我强烈建议不要这样做),这些应该有效:
[r,c,s] = size(A);
new = zeros(r,c,s,'uint8'); % alternatively: zeros(r,c,s,'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, iC, iS);
end
end
end
for iR = 1:r
for iC = 1:c
new(iR, iC, 1) = intmax('uint8') - R(iR, iC);
new(iR, iC, 2) = intmax('uint8') - G(iR, iC);
new(iR, iC, 3) = intmax('uint8') - B(iR, iC);
end
end
如您所见,上述所有解决方案都没有使用您想要避免的 cat
功能。
我有一个 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
如
new = intmax('uint8') - A;
如果您坚持使用循环(在这种情况下我强烈建议不要这样做),这些应该有效:
[r,c,s] = size(A);
new = zeros(r,c,s,'uint8'); % alternatively: zeros(r,c,s,'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, iC, iS);
end
end
end
for iR = 1:r
for iC = 1:c
new(iR, iC, 1) = intmax('uint8') - R(iR, iC);
new(iR, iC, 2) = intmax('uint8') - G(iR, iC);
new(iR, iC, 3) = intmax('uint8') - B(iR, iC);
end
end
如您所见,上述所有解决方案都没有使用您想要避免的 cat
功能。