Удалите ненужные белые пиксели для сегментации пластины Matlab
Изображения с пространственным разрешением, которые я буду использовать в этом проекте, составляют 1000x563. Моя цель на этом шаге - удалить весь нежелательный белый пиксель, но не номерной знак, чтобы я мог аккуратно сегментировать планшет. Но проблема в том, что я не смог убрать эти ненужные пиксели. Кто-нибудь может помочь мне улучшить коды?
От:Затем, Затем,И, наконец,
Как вы заметили на последнем изображении, по-прежнему существует довольно много нежелательных белых пикселей. Пожалуйста помоги!!
ab=imread('image4.jpg');
ab=rgb2gray(ab);
level=graythresh(ab);
ab=im2bw(ab,level);
ab=medfilt2(ab,[3 3]);
ab=edge(ab,'Canny');
figure(); imshow(ab);
Tmp = imfill(ab, 'holes'); %flood filling techniques
Tmp2 = imfill(Tmp-ab, 'holes');
Res = Tmp - imfill(ab & Tmp2, 'holes');
figure(); imshow(Res,[]);
% keeping the white pixels area between 200 to 1000
LB = 200;
UB = 1000;
Res = xor(bwareaopen(Res,LB), bwareaopen(Res,UB));
figure, imshow(Res,[]);
se = strel('disk',2);
Res = imerode(Res,se);
Res=imdilate(Res,se);
Res = bwareaopen(Res, 200);
figure();
imshow(Res,[]);
2 ответа
Вы можете рассмотреть возможность использования Stroke Width Transform. Реализация Matlab может быть найдена здесь. Это преобразование используется для обнаружения текста в естественных изображениях. Он предназначен для работы в гораздо более сложных условиях, чем у вас. Итак, я думаю, вы должны попробовать.
Номерной знак на ваших фотографиях всегда одинакового размера (хотя бы приблизительно)?
Если это так, вы можете взглянуть на некоторый участок пикселей фиксированного размера, возможно, с некоторым наложением на другие, и если количество белых пикселей превышает некоторый порог, оставьте их и в противном случае закрасьте их в черный цвет.
Или просто пометьте их, и если окружающие участки также должны быть очищены, покрасьте их в черный цвет.