Удалите ненужные белые пиксели для сегментации пластины 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 может быть найдена здесь. Это преобразование используется для обнаружения текста в естественных изображениях. Он предназначен для работы в гораздо более сложных условиях, чем у вас. Итак, я думаю, вы должны попробовать.

Номерной знак на ваших фотографиях всегда одинакового размера (хотя бы приблизительно)?
Если это так, вы можете взглянуть на некоторый участок пикселей фиксированного размера, возможно, с некоторым наложением на другие, и если количество белых пикселей превышает некоторый порог, оставьте их и в противном случае закрасьте их в черный цвет.
Или просто пометьте их, и если окружающие участки также должны быть очищены, покрасьте их в черный цвет.

Другие вопросы по тегам