Большой выбор фильтров.
Результат функции MATLAB edge с применением различных типов фильтров:
Я похож на 'Canny' и «приблизительный» дает лучший результат.
Согласно документации MATLAB:
Методы 'Canny' и 'приблизительные' не поддерживаются в графическом процессоре.
Возможно, это означает, что фильтр Canny менее приспособлен для реализации на GPU.
Вот код MATLAB:
I = imread('images.jpg'); %Read image.
I = rgb2gray(I); %Convert RGB to Grayscale.
%Name of filters.
filt_name = {'sobel', 'Prewitt', 'Roberts', 'log', 'zerocross', 'Canny', 'approxcanny'};
%Display filtered images
figure('Position', [100, 100, size(I,2)*4, size(I,1)*4]);
for i = 1:length(filt_name)
%Filter I using edge detection filtes of type 'sobel', 'Prewitt', 'Roberts'...
%Use default MATLAB parameters for each filter.
J = edge(I, filt_name{i});
subplot(3, 3, i);
image(im2uint8(J));
colormap('gray');
title(filt_name{i});
axis image;axis off
end