【发布时间】:2016-01-12 03:37:45
【问题描述】:
我最近被分配了一项与图像处理相关的任务。问题是我之前没有这方面的经验,所以我遇到了一些困难。
这个概念是从 2D 图像中创建 3D 图像,首先提取 R、G、B 分量并在根据某种公式移动红色分量后将它们组合起来(即计算必须移动的像素通过将公式a = x(i,j,k)*40/max(Rcomponent(:)) 应用于红色图像的每个元素,并将元素x(i,j-a,k) 替换为x(i,j,k)) 的值。
这是我目前的进度:
original = imread(nameofimag); % read file
imaginfos = imfinfo(nameofimag); % identify colortype
coltype = imaginfos(1).ColorType;
truecol = 'truecolor';
if strcmp(coltype,truecol) == 1 % convert to grayscale if needed
originalgray = rgb2gray(original);
else
originalgray = original;
end
Z = zeros(size(originalgray,1),size(originalgray,2));
% create red, blue, green parts
imagR = cat(3,originalgray,Z,Z);
imagG = cat(3,Z,originalgray,Z);
imagB = cat(3,Z,Z,originalgray);
imagRshifted = zeros(size(originalgray,1),size(originalgray,2));
h = waitbar(0,'Please wait...');
% shift red image
for i = 1:size(imagR,1)
for j = 1:size(imagR,2)
for k = 1:size(imagR,3)
imagRshifted(i,j,k) = imagR(i,j,k);
pixeltochange = round((imagRshifted(i,j,k)*40)...
/max(original(:)));
if pixeltochange < j
imagRshifted(i,j-pixeltochange,k) =...
imagRshifted(i,j,k);
end
end
end
waitbar(i/size(imagR,1));
end
imagRshifted = uint8(imagRshifted);
% combine R,G,B to create 3D image
imag3D = imfuse(imagRshifted,imfuse(imagG,imagB));
% plot the desired images
if depictrgb == 0;
figure;imshow(imag3D);
else
figure;imshow(imag3D);
figure;imshow(imagR);
figure;imshow(imagB);
figure;imshow(imagG);
end
close(h);
end
如您所见,结果非常令人困惑(至少对我而言)。起初,有一条线将最终图像分成两部分(似乎该公式仅应用于该线的左侧部分,而右侧部分未受影响)。此外,生成的图像更像是随机像素的重建,而不是 R、G、B 分量的组合。
任何想法都将不胜感激。
提前谢谢你。
【问题讨论】:
-
可以发一下原图吗?另外,你知道图像应该是什么样子吗?原始图像会一直是灰度的吗?
-
此外,彩色图像在技术上是的 3D 图像。它有 x,y,C 分量。您将问题描述为 2D 到 3D 的转换,但使用的是 2D 图像中的 RGB 值,这没有任何意义!
-
亲爱的安德,感谢您的评论。关于您的问题:1)原始图像是左侧的图像(表示为“之前”),2)修改后的图像应该看起来像这样postimg.org/image/5jdglfikt。 3)原始图像将是灰度或真彩色类型(这就是我在代码中使用第一行的原因)。至于您的第二条评论,您指的是红色、绿色、蓝色部分的提取?初始图像是 2D,问题是 2D 到 3D 的转换。
-
如果图像是真彩色,那么它就是 3D!我还是明白了。让我试试。您可以发布原始图像而不进行任何编辑吗?
-
关于您的公式的问题:
a = x(i,j,k)*40/max(Rcomponent(:))。这有点奇怪。k?k是什么?不是二维图像吗?Rcomponent是什么?R值的最大值?不是二维灰度图吗?根据定义,它没有 R。
标签: matlab image-processing multidimensional-array