Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2020, 20:57   #1
Miligania
Новичок
Джуниор
 
Регистрация: 31.03.2020
Сообщений: 1
Лампочка Распознавание образов в Matlab. Определение диаметра и расстояние до края фигуры.

Доброго времени суток! Не нашла темы про Матлаб.
В связи со всемирным карантином, решила по практиковаться в программировании.
В среде Матлаб накодила, что в режиме реального времени распознаются отверстия на детали, даже высчитывается диаметр, но никак не могу добиться, чтобы показывал еще и расположение отверстия относительно края детали, видит либо отверстия, либо прямоугольник, одно в другом не видит.
Может кто-то сможет помочь, хотелось бы, чтобы программа распознавала объект (прямоугольник), выделяла его как-то, в нем распознавала отверстия, высчитывала их диаметр и вычисляла координаты отверстия относительно РАМКИ ВЫДЕЛЕННОГО ПРЯМОУГОЛЬНИКА.
Пример картинки прикрепляю, как будто какая-то деталь лежит на черном фоне, чтобы он контур детали определял и отверстия относительно контура.
Код:
clear all;

cam = webcam('HP Truevision HD');
img_display = figure('CloseRequestFcn',@my_closereq);
global LOOP_RUNNING;
LOOP_RUNNING = true;
while (LOOP_RUNNING)
img = snapshot(cam);
t_img = imadjust(rgb2gray(img)); % переводим в оттенки серого и выравниваем яркость
Ibw = ~imbinarize(t_img,graythresh(t_img)); % переводим в ЧБ и инвертируем
diff_im = imsubtract(img(:,:,1), rgb2gray(img));
se1 = strel('rectangle', [10 10] ); % находим белые кружки более 5 пикселей
Ibw = imopen(Ibw, se1); % убираем лишнее
    %Use a median filter to filter out noise
%diff_im = medfilt2(diff_im, [3 3]);
diff_im = bwareaopen(Ibw,5);  % Удалите все эти пиксели размером менее 300 пикселей
bw1 = bwlabel(diff_im, 8); % Обозначьте все подключенные компоненты на изображении.
stats1 = regionprops(bw1, 'BoundingBox','Centroid');
se = strel('disk',5); % находим белые кружки более 5 пикселей
Ibw = imopen(Ibw, se); % убираем лишнее
imshow(Ibw) % отображаем
bw2 = edge(Ibw,'canny', 0.15, 2);% выделяем границы методом Канни
bw2 = imfill(bw2,'holes');% заливаем замкнутые области на изображении.
bw2 = imopen(bw2,se);% — морфологическое открытие, тонкие линии исчезают.
[B,L] = bwboundaries(bw2);
stats = regionprops(L,'Centroid','EquivDiameter');
hold on
for object = 1:length(stats1)
    bb = stats1(object).BoundingBox;
    bc = stats1(object).Centroid;
    rectangle('Position', bb, 'EdgeColor','r', 'LineWidth',2)
    plot(bc(1), bc(2), '-m+')
    a=text(bc(1)+15,bc(2), strcat('X: ', num2str(round(bc(1))), '    Y: ', num2str(round(bc(2)))));
    set(a, 'FontName', 'Arial', 'FontWeight', 'bold', 'FontSize', 12, 'Color', 'yellow');
end
    for k = 1:length(B)
 boundary = B{k};
 radius = stats(k).EquivDiameter/2;
 xc = stats(k).Centroid(1);% координаты центра
 yc = stats(k).Centroid(2);% координаты центра
 theta = 0:0.01:2*pi;
 Xfit = radius*cos(theta) + xc;
 Yfit = radius*sin(theta) + yc;
 plot(Xfit, Yfit, 'g');
 text(boundary(1,2)-15,boundary(1,1)+15, num2str(radius,3),'Color','y',...
  'FontSize',8);
% text(boundary(1,2)-40,boundary(1,1)+10, num2str(xc,3),'Color','green',...
 %'FontSize',10);
%  text(boundary(1,2)-10,boundary(1,1)+40, num2str(yc,5),'Color','red',...
%  'FontSize',10);
    end
end

function my_closereq(~,~)
global LOOP_RUNNING;
LOOP_RUNNING = false;
delete(gcf);
clear('cam');
return;
end
Изображения
Тип файла: jpg 1524195987.jpg (16.2 Кб, 0 просмотров)
Miligania вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Распознавание образов manchester_alan Общие вопросы Web 8 09.04.2018 08:42
Распознавание образов manchester_alan Помощь студентам 0 22.03.2018 19:18
распознавание образов brutalis Qt и кроссплатформенное программирование С/С++ 1 03.03.2015 15:54
Распознавание образов в matlab DgaDga Помощь студентам 0 29.06.2011 20:36
Распознавание образов в Delphi 7 IronFire Помощь студентам 4 30.09.2010 22:16