Я делаю детектор края DoG.Я должен выполнить следующие шаги: 1. DoG 2. Порог до нуля 3. Найти пересечение нуля.
До сих пор я думаю, что я успешно реализовал это без пересечения нулей.Документация Matlab гласит, что функция рёбер нулевого скрещивания (пример: edge (dog, 'zerocross', 0.025);) будет применять обнаружение краев бревен, если нет дополнительного метода.Я не уверен, как я могу реализовать это с помощью своего фильтра или как написать свою собственную функцию нулевого скрещивания.
grayImage = imread('cl.tif');
grayImage = rgb2gray(grayImage);
[rows, columns, numberOfColorBands] = size(grayImage);
% Enlarge figure to full screen.
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);
set(gcf,'name','DoG','numbertitle','off');
%DoG
gaussian1 = imgaussfilt3(grayImage, 1);
gaussian2 = imgaussfilt3(grayImage, 9);
dog = gaussian1 - gaussian2;
subplot(3, 2, 3);
imshow(dog, []);
title('DOG Filtered Image', 'FontSize', fontSize);
% Let's compute and display the histogram.
[pixelCount, grayLevels] = imhist(dog(:));
subplot(3, 2, 4);
bar(grayLevels, pixelCount);
grid on;
title('Histogram of DOG Filtered Image', 'FontSize', fontSize);
%Thresholding
t = 4;
ind_below = (dog < t);
ind_above = (dog >= t);
dog(ind_below) = 0;
dog(ind_above) = 255;
subplot(3, 2, 5);
imshow(dog, []);
title('Threshold', 'FontSize', fontSize);
%Zero-crossing
zeroCross = edge(dog, 'zerocross', 0.025);
subplot(3, 2, 6);
imshow(zeroCross, []);
title('Zerocrossing', 'FontSize', fontSize);
В текущем состоянии программы я обнаруживаю каждую мелочь, шум.В настоящее время это то, что я получаю (https://ibb.co/HVPnnPp), и мне нужно закончить с этим (https://ibb.co/wJrRbk7). Исходное изображение (https://ibb.co/jhTLYHR).