我有一个带有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
这是我的原始图片
这是我使用方向的gabor滤镜得到的可视化图像 这是我必须获得的关于可视化的图像类型/类型。即我必须在我的原始图像上施加可视化图像,我必须得到这种类型的图像
答案 0 :(得分:1)
根据您提供的信息,我的理解是您希望第三张/最终图像叠加在第一张/最初图像的顶部。当使用分割来检测脑部MRI图像中的出血时,我会做这样的事情。
首先,我们设置一些定义:
现在,复制I_src
并将其设为彩色图像而不是灰度图像。
I_hybrid = I_src
colorIm = gray2rgb(I_src)
我们假设I_src
和I_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。结果会很相似,但你的结果会更清晰,更漂亮。
请让我知道这是怎么回事。
<强>参考强>