Truba_DS_0_0058_5.7zTruba_DS_0_0058_4.
1 Галка FRob Тест фильтра Робертса (В окне "Супер зум" /только просмотр / ) ...
![Изображение](http://i.piccy.info/i9/993e5888600809f01337bdf986824dd4/1502636242/15518/913427/Rob01_500.jpg)
![Изображение](http://i.piccy.info/a3/2017-08-13-14-57/i9-11468071/430x387-r/i.gif)
"Было темно ..." Подпороговая мряка правит бал ...
Truba_DS_0_0058_5.
2 Управляемый порог для фильтра Робертcа [Движок под кнопкой "Захват кадров" ]
3 Галка MF Чистка мусора для фильтра Робертcа.
"Вот кто-то зашел на порог незнакомый ..."
![Изображение](http://i.piccy.info/i9/d7bf20aa2d1ab03ae7f07816283a721b/1502636334/42444/913427/0_0058_5_2_500.jpg)
![Изображение](http://i.piccy.info/a3/2017-08-13-14-58/i9-11468074/500x324-r/i.gif)
![Изображение](http://i.piccy.info/i9/2f72c6dde820c74fa984f21f9543c5c3/1502637334/40768/913427/0_0058_5_3_500.jpg)
![Изображение](http://i.piccy.info/a3/2017-08-13-15-15/i9-11468123/439x379-r/i.gif)
Зы
Можно было пробовать фильтр Собела ... но он чуть сложнее и вроде как дает боле тонкие(как выясняется на практике более толстые ...
![Idea :idea:](./images/smilies/icon_idea.gif)
) линии при "трассировке" так что ФС тоже будет но чуть позже...
- Код: Выделить всё
//Фильтр Робертса + Порог + Чистка
procedure Roberts(var Clip: TBitmap;Porog:Integer);
Type
BA=Array[0..1]of byte;
var P0,P1,P2,P21:^BA;
X,Y,V,U,C,CC: integer;
BB:TBitmap;
begin
BB:=TBitmap.Create;
bb.PixelFormat:=pf24bit;
bb.SetSize(Clip.Width,Clip.Height);
for Y:=1 to BB.Height-1 do
begin
P1:=Clip.ScanLine[Y-1];
P0:=Clip.ScanLine[Y];
BB.BeginUpdate(False);
P2:=BB.ScanLine[Y];
P21:=BB.ScanLine[Y-1];
for X:=0 to Pred(BB.Width-2) do begin
for C:=0 to 2 do
begin
U:=P0[(x*3)+C]-P1[((x+1)*3)+C];
V:=P1[(x*3)+C]-P0[(x+1)*3+C];
P2[(x*3)+c]:=Trunc(Sqrt(Sqr(U)+SQR(V)));
//Порог (четыре уровня )....
CC:=0;
IF P2[(x*3)+C] >Porog then CC:=255 else
IF P2[(x*3)+C] >Porog div 2 then CC:=125 else
IF P2[(x*3)+C] >Porog div 3 then CC:=85 else
IF P2[(x*3)+C] >Porog div 4 then begin CC:=62;
// Ловушка для одиночных пикселей
if self.CheckBox4.Checked then
if Not ((X>0) and ((P2[((x-1)*3)+C]
+P2[((x+1)*3)+C]
+P21[((x-1)*3)+C]
+P21[(x*3)+C]
+P21[((x+1)*3)+C]) div 5 > Porog div 4))then
CC:=0;
end
end;
if (cc<>0) then for C:=0 to 2 do P2[(x*3)+c]:=CC;
end;
BB.EndUpdate(False);
end;
Clip.Free;Clip:=bb;
end;
Код нуждается в оптимизации но работает ...
ЗЫ
Извиняюсь за не внимательность ... Разуметься это фильтры Робертса и Собела ..
Добавлено спустя 23 часа 22 минуты 1 секунду:Кстати вот и он Фильтр Собела...
(Надежд не оправдал да ярче но кривее, толще и мусорней )
... или все-же где-то я сам ляп пропустил
- Код: Выделить всё
//Фильтр Собела + Порог
procedure Sobel(var Clip: TBitmap;Porog:Integer);
Type
BA=Array[0..1]of byte;
var P0,P1,P02,P2,P21:^BA;
X,Y,V,U,C,CC: integer;
BB:TBitmap;
begin
BB:=TBitmap.Create;
bb.PixelFormat:=pf24bit;
bb.SetSize(Clip.Width,Clip.Height);
for Y:=1 to BB.Height-2 do
begin
P1:=Clip.ScanLine[Y-1];
P0:=Clip.ScanLine[Y];
P02:=Clip.ScanLine[Y+1];
BB.BeginUpdate(False);
P2:=BB.ScanLine[Y];
P21:=BB.ScanLine[Y-1];
for X:=1 to BB.Width-2 do begin
for C:=0 to 2 do
begin
U:= (P02[((x-1)*3)+C]+2*P02[(x*3)+C]+P02[((x+1)*3)+C])
-(P1[((x-1)*3)+C]+2*P1[(x*3)+C]+P1[((x+1)*3)+C]);
V:= (P1[((x-1)*3)+C]+2*P0[((x-1)*3)+C]+P02[((x-1)*3)+C])
-(P1[((x+1)*3)+C]+2*P0[((x+1)*3)+C]+P02[((x+1)*3)+C]);
P2[(x*3)+c]:=ABS(U)+ABS(V);
// Trunc(Sqrt(Sqr(U)+SQR(V)));
CC:=0;
//Управляемый порог фильтра
IF P2[(x*3)+C] >Porog then CC:=255 else
IF P2[(x*3)+C] >Porog div 2 then CC:=125 else
IF P2[(x*3)+C] >Porog div 3 then CC:=85 else
IF P2[(x*3)+C] >Porog div 4 then begin CC:=62;
// Ловушка для одиночных пикселей
if self.CheckBox4.Checked then
if Not ((X>0) and ((P2[((x-1)*3)+C]
+P2[((x+1)*3)+C]
+P21[((x-1)*3)+C]
+P21[(x*3)+C]
+P21[((x+1)*3)+C]) div 5 > Porog div 4))then begin
CC:=0;
end
end ;
end;
if (cc<>0) then for C:=0 to 2 do P2[(x*3)+c]:=CC;
end;
BB.EndUpdate(False);
end;
Clip.Free;Clip:=bb;
end;
Добавлено спустя 21 час 53 минуты 49 секунд:
Детектор Канни (исходники на дельфи) обнаружен...
Сконвертирован в Лазарус (Если кто-то думает что там все делает автомат .. пусть он так не думает !
)...
Исправлен ( ....интересно код там вообще рабочий был?
) ...
Модифицирован (Цветное сглаживание и вообще более нормальная работа в RGB режиме )...
![Изображение](http://i.piccy.info/i9/aa57145d2fd0eaa4db7af4d6ece69a45/1502799444/31832/913427/1_500.jpg)
![Изображение](http://i.piccy.info/a3/2017-08-15-12-17/i9-11474426/496x336-r/i.gif)
![Изображение](http://i.piccy.info/i9/2f50314cee5f2123a58818e6f3bf1456/1502799479/34701/913427/2_500.jpg)
Detection_contour_Canny02.7z
Теперь еще нужно научится применять его на практике ...
Добавлено спустя 20 часов 23 минуты 13 секунд:И так задумался я начнем бы мене простом потренироваться в использовании всей это бездны премудрости и могущества...
Напрашивается старая идея-фикс распознавание маркеров (и что важнее их положения в пространстве ) для дополненной реальности .
Вооружившись в качестве дорожной карты
ЭТОЙ статьей .
Начал думать что мне взять за ПРОСТЕЙШИЙ маркер ? ...и тут с верхней полки на меня упал ОН ! Кубик Рубика ! ... народ эврика !!!!
![Изображение](http://i.piccy.info/i9/0a99219658a1d2517fa45902ee839554/1502883438/44478/913427/M2_500.jpg)
![Изображение](http://i.piccy.info/a3/2017-08-16-11-37/i9-11477796/472x354-r/i.gif)
Так что задача проста : определить координаты хотя-бы одной грани и нарисовать "виртуальный кубик" поверх реального !
Вообще хорошо-бы повторить "подвиг програмера " и сделать AR-Мастер сборки кубика ..
![Изображение](https://nplus1.ru/images/2016/06/02/cc3a08f49489365f0ca1e6d87d308624.gif)
Но это сильно побочный квест ...
Отсюда вопрос : Что лучше использовать как образец ? Черную или белую табличку 3Х3 , набор квадратиков или просто отдельные квадратики (а кубик целиком определять по их положению относительно друг друга )
Зы
Интересно это только мне кажется что нынешние поделки в области АР ну просто
дико тупые ?
Ведь и ежу понятно, что определив положение в пространстве даже всего одной метки можно развернуть целый виртуальный "рабочий стол" (Точнее рабочий ОБЪЕМ ) А качестве триди устройства устройства визуализация вполне может хватить обычного монитора аниглиф очков (или затворных ) и "вывернутой перспективы" (Это когда кажется что изображение висит перед экраном )...
В моем случае я думаю юзать простую связку из веб-сервера, смартфона и "кастрюли стереовизора "
![Изображение](https://i1.rozetka.ua/goods/1438515/modecom_os_mc_g3dp_00_images_1438515828.jpg)
Данные с камеры сартфона на обработку можно получать например вот так
https://play.google.com/store/apps/deta ... bcam&hl=ruВзаимодействие с ДР можно сделать не менее простым ...
1 "3д курсор"
2 или воспользовавшись чем-то вроде от этого с позволения сказать "девайса" ...
![Изображение](http://i.piccy.info/i9/42de566bda6b244e211d144c43186c16/1502881587/6285/913427/M1.jpg)
![Изображение](http://i.piccy.info/a3/2017-08-16-11-06/i9-11477685/136x200-r/i.gif)
(Карандаш+ прищепка +какой-нибудь маркер )
Зы Зы
Ух разошелся я однако ... теперь в дело за "малым" написать что-то рабочие ...
... и чувствую что почти "дозрел" до разборок с жутким и тяжелым (как мне казалось еще недавно OpenCV ) ...
![Idea :idea:](./images/smilies/icon_idea.gif)