Тема обнаружения краев становится популярной с каждым днем. Обнаружение кромок и использование искусственного интеллекта для обработки этих кромок повышают производительность. Например, автомобили с автоматическим управлением обнаруживают линии дороги и совершают некоторые движения, или в Instagram вы можете использовать обнаружение краев для фильтрации изображений.

Итак, я пишу простой код обнаружения краев в MATLAB без использования инструмента обработки изображений, потому что я хочу показать, как работают системы. Если вы понимаете основную идею, вы можете использовать любой язык программирования.

Прежде всего, подбираем образ. Переименуйте изображение, как хотите. Я использую sign.jpg

Затем запустите часть кода. Использование MATLAB для чтения изображений очень просто.

image = imread('signs.jpg');

Мы получаем изображение в MATLAB, другое дело - превращаем изображение в оттенки серого. Потому что наблюдать за краями намного проще.

image = imread('signs.jpg');
image_bw = rgb2gray(image);
figure(1)
imshow(image_bw)

Важно выбрать пороговое значение для обнаружения фронта. Если ваше пороговое значение велико, ваш вывод будет включать все ребра. Кроме того, если ваше пороговое значение невелико, ваши выходные данные не могут обнаружить края. Я решил, что значение этого изображения - 15.

filename = 'signs.jpg'
image = imread(filename);
image_bw = rgb2gray(image);
figure(1)
imshow(image_bw);
th = 15; %threshold

На самом деле мы не начинаем детектировать края. Теперь мы готовы к этому. Создайте нулевой массив того же размера, что и «sign.jpg» для вывода.

image = imread('signs.jpg');
image_bw = rgb2gray(image);
figure(1)
imshow(image_bw)
th = 15; %threshold
[x,y]=size(image_bw);
edge=zeros([x,y]);

Запустите обнаружение краев в циклах for. Для циклов проверяют значения пикселей строки и вычитают друг друга для сравнения порогового значения. Если вычитаемое значение больше или равно пороговому значению, номера нулевого массива (ребер) изменяются с номерами циклов for, которые они являются координатами.

image=imread('signs.jpg');
image_bw = rgb2gray(image);
figure(1)
imshow(image_bw)
th = 15; %threshold
[x,y]=size(image_bw);
edge=zeros([x,y]);
for i=1:x
  j=1;
    while j+2<=y
      if abs(image_bw(i,j)-image_bw(i,j+2))>=th
        edge(i,j+1) = 1;
      end 
  j=j+1;
  end
end
figure(2)
imshow(edge);