如何叠加两个图像?

时间:2013-11-07 06:55:08

标签: image-processing filtering

我有一个带有12个不同方向的gabor滤镜的可视化输出。我想在我的视网膜图像上叠加视觉图像以进行血管提取。我该怎么做?我尝试过以下方法。还有其他任何方法在matlab中执行图像叠加。

这是我的代码

         I = getimage();
         I=I(:,:,2);
  lambda  = 8;
  theta   = 0;
  psi     = [0 pi/2];
  gamma   = 0.5;
  bw      = 1;
  N       = 2;
  img_in = im2double(I);
  %img_in(:,:,2:3) = [];   % discard redundant channels, it's gray anyway
  img_out = zeros(size(img_in,1), size(img_in,2), N);
  for n=1:N
   gb = gabor_fn(bw,gamma,psi(1),lambda,theta)...
            + 1i * gabor_fn(bw,gamma,psi(2),lambda,theta);
 % gb is the n-th gabor filter
    img_out(:,:,n) = imfilter(img_in, gb, 'symmetric');
   % filter output to the n-th channel
   %theta = theta + 2*pi/N
  %figure;
  %imshow(img_out(:,:,n));
  imshow(img_in); hold on;
  h = imagesc(img_out(:,:,n)); % here i am getting error saying CDATA must be size[M*N]
  set( h, 'AlphaData', .5 ); % .5 transparency
  figure;
  imshow(h);
   theta = 15 * n;  % next orientation
  end

enter image description here 这是我的原始图片

enter image description here 这是我使用方向的gabor滤镜得到的可视化图像 enter image description here 这是我必须获得的关于可视化的图像类型/类型。即我必须在我的原始图像上施加可视化图像,我必须得到这种类型的图像

1 个答案:

答案 0 :(得分:1)

根据您提供的信息,我的理解是您希望第三张/最终图像叠加在第一张/最初图像的顶部。当使用分割来检测脑部MRI图像中的出血时,我会做这样的事情。

首先,我们设置一些定义:

  • I_src = source / original image
  • I_out =输出/最终图像

现在,复制I_src并将其设为彩色图像而不是灰度图像。

I_hybrid = I_src
colorIm = gray2rgb(I_src)

我们假设I_srcI_out都是相同的视觉尺寸(即宽度,高度),I_out 严格黑色 - 和 - 白色(即:单色)。现在,我们可以使用I_out作为遮罩模板,在结果图像中进行Alpha通道调整。这是它变得有趣的地方。

BLACK=0;
WHITE=1;
[length width] = size(I_out);
for i = 1:1:length
   for j = 1:1:width
   if (I_out(i,j) == WHITE)
      I_hybrid(i,j) = I_hybrid(i,j) + [0.25 0 0]a;
   end
end

这将使您获得原始图像,眼睛中的血管稍微变亮并呈现红色。现在,您可以将原始图像与所需的特征突出显示,但不会被覆盖(即:您可以通过减去原始颜色矢量来撤消突出显示)。

我将包含一个输出结果的示例,但它很吵,因为我必须在GIMP中创建它,因为我现在没有安装Matlab。结果会很相似,但你的结果会更清晰,更漂亮。

enter image description here

请让我知道这是怎么回事。


<强>参考

  1. “将图像从灰度转换为彩色”http://blogs.mathworks.com/pick/2012/11/25/converting-images-from-grayscale-to-color/