2015-03-26 3 views
-2

У меня есть изображение в формате png цифры «6», я хочу определить положение стебля по отношению к блобу с помощью морфологических операций. Я обнаружил blob of 6, используя приведенный ниже код. Теперь я не знаю, как определить основную цифру «6». Я попытался использовать алгоритмы преобразования hough и алгоритмы обнаружения границ, но это не помогло.Распознавание цифр в Matlab с использованием морфологических операций

Вот мой код для обнаружения блобо:

img=imread('six.png');  
img=rgb2gray(img);  
figure,imshow(img); 
i1=im2bw(img);  
st=strel('square',20);  
imdilate(i1,st);  
figure,imshow(i1);  
i2=imfill(i1,'holes');  
figure,imshow(i2);  
i1=imsubtract(i2,i1);  
B = bwboundaries(i1);  
figure,imshow(i1)  
i2=i2-i1;  
figure,imshow(i2);  
text(10,10,strcat('\color{green}Objects Found:',num2str(length(B))))  
hold on  

for k = 1:length(B)  
    boundary = B{k};  
    plot(boundary(:,2), boundary(:,1), 'g', 'LineWidth', 0.2) 

end 

if eq(num2str(length(B)),'1')   
    h=msgbox('the number is 6');  
else  
    h=msgbox('unknown number'); 
end 

Вот оригинальные шесть изображений и моего текущего выхода

Input six

Output six

+0

Вы можете добавить ссылку на ваш six.png изображения, так что я могу видеть, что делает ваш код? – Cecilia

+0

Я не могу опубликовать изображение becoz Я новый пользователь для переполнения стека, и мне нужно 10 репутации, чтобы опубликовать изображение. Вышеприведенный код находит blob в цифре, так как в случае 6 он один. Я ищу метод, который позволяет мне найти, что часть стержня находится над блобом в цифре 6 –

+0

Вы можете отправить ссылку и более высокий респ. Пользователь может добавить картинку – Cecilia

ответ

1

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

Я начинаю с тех же морфологических операций, что и вы, и добавляйте дополнительные удаляющие шаг пиксели в пределах порога расстояния обнаруженного отверстия.

img=imread('six.png');  
img=im2bw(img);  
figure,imshow(img); 

filled_img=imfill(img,'holes');  
figure; imshow(filled_img); 

filled_boundary= bwmorph(filled_img,'remove'); 
figure 
imshow(filled_boundary) 

hole = ~img & filled_img; 
figure; imshow(hole); 

hole_boundary = bwmorph(hole, 'remove'); 
figure; imshow(hole_boundary); 

%Remove points on the boundary that are close to the hole 
[hole_x, hole_y] = find(hole_boundary); 
[fill_x, fill_y] = find(filled_boundary); 
D = pdist2([hole_x, hole_y], [fill_x, fill_y]); 
[distance, ~] = min(D, [], 1); 

distance_threshold = 10; 
top_edges = filled_boundary; 
top_edges(fill_x(distance<distance_threshold), fill_y(distance<distance_threshold)) = 0; 
figure; imshow(top_edges); 

Это то, что мой вывод изображения выглядит

Top of six

+0

Я понял это, но как я могу подсчитать стебли и как я могу найти положение стебля, как в случае с 6, это над блобом, а в 9 это под блобом. –

+0

@SalmanBaqri Я бы предложил найти центроид (центр тяжести) стебля и капли и сравнить их координаты. – Cecilia

Смежные вопросы