Обнаружение краев в пиксельных изображениях - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь найти разные подходы к поиску краев в пиксельном изображении, такие как это:

enter image description here

Под краями я подразумеваю четкие линии, которые отображаются от пикселей (блоков), а не краев от кожи к фону и т. д. c.
Кто-нибудь получил советы о том, как найти эти края?
Сможет ли фильтр Собела обнаружить эти линии как ребра?

Я еще ничего не тестировал, я больше изучаю варианты того, какие типы фильтров существуют.
Я буду реализовывать материал в C ++ и DirectX12.

1 Ответ

1 голос
/ 22 января 2020

Большой выбор фильтров.

Результат функции MATLAB edge с применением различных типов фильтров:

enter image description here

Я похож на '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
...