Обрезка (морфология)
Алгоритм обрезки — это метод, используемый при цифровой обработке изображений , основанный на математической морфологии . [1] Он используется в качестве дополнения к алгоритмам скелетирования и прореживания для удаления нежелательных паразитных компонентов (шпор). В этом случае «паразитные» компоненты относятся к ветвям линии, которые не являются ключевыми для общей формы линии и должны быть удалены. Эти компоненты часто могут быть созданы с помощью алгоритмов обнаружения границ или оцифровки . Обычно обрезка используется для автоматического распознавания рукописных символов . Часто непоследовательность в написании писем создает нежелательные стимулы, которые необходимо устранить для лучшей характеристики. [2]
Математическое определение
[ редактировать ]Стандартный алгоритм обрезки удалит все ветви короче заданного количества точек. Если паразитная ветвь короче четырех точек и мы запускаем алгоритм с n = 4, ветвь будет удалена. Второй шаг гарантирует, что основные стволы каждой линии не будут укорочены в результате этой процедуры.
Структурирование элементов
[ редактировать ]
Знак x в массивах указывает на состояние «неважно», т. е. изображение может иметь либо 1, либо 0 в месте.
Шаг 1: Прореживание
[ редактировать ]Примените этот шаг заданное (n) раз, чтобы исключить любую ветвь с (n) или меньшим количеством пикселей.
Шаг 2. Найдите конечные точки
[ редактировать ]Везде, где элементы структурирования выполняются, центр матрицы 3x3 считается конечной точкой.
Шаг 3: Расширьте конечные точки
[ редактировать ]Выполните расширение, используя матрицу 3x3 (H), состоящую из всех единиц, и вставляйте только единицы там, где исходное изображение (A) также имело 1. Выполните это для каждой конечной точки во всех направлениях (n) раз.
Шаг 4: Объединение X 1 и X 3
[ редактировать ]Возьмите результат шага 1 и объедините его с шагом 3, чтобы получить окончательные результаты.
МАТЛАБ Код
[ редактировать ]%% ---------------
% Pruning
% ---------------
clear; clc;
% Image read in
img = imread('Pruning.tif');
b_img_skel = bwmorph (img, 'skel', 40);
b_img_spur = bwmorph(b_img_skel, 'spur', Inf);
figure('Name', 'Pruning');
subplot(1,2,1);
imshow(b_img_skel);
title(sprintf('Image Skeleton'));
subplot(1,2,2);
imshow(b_img_spur);
title(sprintf('Skeleton Image Pruned'));
MATLAB Пример
[ редактировать ]В приведенном ниже примере MATLAB берется исходное изображение (внизу слева) и скелетонируется его 40 раз, а затем сокращается изображение, чтобы удалить выступы, как указано в приведенном выше коде MATLAB. Как показано (внизу справа), это устранило большую часть всех помех, что привело к более чистому изображению.
Исходное изображение | Скелет изображения | Изображение скелета обрезано |
---|---|---|
См. также
[ редактировать ]Внешние ссылки
[ редактировать ]Ссылки
[ редактировать ]- ^ Расс, Джон К. (2011). Руководство по обработке изображений (6-е изд.). Бока-Ратон: CRC Press. ISBN 978-1-4398-4045-0 .
- ^ Гонсалес, Рафаэль С.; Вудс, Ричард Э. (2008). Цифровая обработка изображений (3-е изд.). Река Аппер-Седл, Нью-Джерси: Прентис-Холл. ISBN 978-0131687288 .