首页 > 解决方案 > 如何计算 12 个方向的最大响应?

问题描述

我已经尝试在 MATLAB 上实现这篇论文:https ://www.sciencedirect.com/science/article/pii/S1877050915028355 。

我被困在 4.1 Step1:

通过计算12个方向的最大响应得到打开的图像I。

我该如何实施?

这是我的一个方向的代码:

Input_Image = imread('Retina_pics/training/images/24_training.tif');
mask = imread('Retina_pics/training/mask/24_training_mask.gif');
figure, imshow(Input_Image), title('Input Image');
figure, imshow(mask), title('Mask');
Resized_Image = imresize(Input_Image, [584 565]);
Double_depth_Image = im2double(Resized_Image);
Gray_Image = rgb2gray(Double_depth_Image);
figure, imshow(Gray_Image), title('Gray Image');

se = strel('rectangle', [7.0 1.0]);
afterOpening = imopen(Gray_Image, se);
figure, imshow(afterOpening), title('After Open');

% Reconstructed_Image = imreconstruct(afterOpening, mask);

标签: matlabimage-processingimage-segmentationmathematical-morphology

解决方案


首先找到跨越所有 180 度的 12 个角度(180 度的线与 0 度的线相同):

phi = linspace(0, 180, 13);
phi(end) = []; % remove 13th element, it’s the same as 0

接下来,在每个角度创建一个线结构元素( doc )并将其应用于图像:

se = strel('line', 7, phi(ii));
afterOpening = imopen(Gray_Image, se);

最后,在这 12 个结果中取元素最大值。使用循环执行此操作的更有效方法如下:


se = strel('line', 7, phi(1));
afterOpening = imopen(Gray_Image, se);
for ii=2:numel(phi)
   se = strel('line', 7, phi(ii));
   tmp = imopen(Gray_Image, se);
   afterOpening = max(afterOpening, tmp);
end

推荐阅读