Thụng qua cỏc chƣơng trỡnh điều khiển đƣợc cung cấp kốm với cỏc camera, chỳng ta cú thể đọc trực tiếp luồng dữ liệu video qua cỏc hàm thƣ viện. Tuy nhiờn trong chƣơng trỡnh này chỳng tụi sử dụng ActiveX Control G2Video đỏp ứng cho mọi camera kết nối với mỏy tớnh qua cụng USB và AXIS Camera Control để thu nhận tớn hiệu video từ cỏc camera IP.
Với camera IP, ngƣời sử dụng chỉ cần xỏc định đƣợc địa chỉ IP của camera. Vớ dụ, đối với camera chỳng tụi đang sử dụng:
IP = "169.254.13.14"
CamImage.URL = "http://" + IP + "/axis-cgi/mjpg/video.cgi"
Đối với camera USB, đoạn chƣơng trỡnh sau đõy cú thể thu nhận đƣợc
tớn hiệu video trực tiếp từ camera:
Trong một số trƣờng hợp, nếu nhƣ nhà cung cấp thiết bị khụng cung cấp cỏc hàm thƣ viện hoặc cỏc AxtiveX giỳp ngƣời sử dụng lấy tớn hiệu từ cỏc camera, giải phỏp của chỳng tụi đƣa ra nhƣ sau:
Cỏc tớn hiệu thu nhận đƣợc camera đều đƣợc lƣu trữ dƣới dạng file ảnh AVI, sau khi xử lý xong, cỏc camera cú thể nộn tớn hiệu về cỏc dạng khỏc nhau nhƣ JPEG; MPEG-4... do vậy chỳng tụi đọc trực tiếp cỏc file ảnh AVI
i = 0 j = 1
Do Until (i > 0) Or (j > 10) Video.VfWDriver = j
i = Video.VfWGetFormat(sizeX, sizeY, sizeImage, Fourcc, BitCount) j = j + 1
Loop
If j > 10 Then
Call MsgBox("Camera not found !", vbOKOnly + vbInformation, "Note") Exit Sub
đƣợc lƣu trữ tạm thời trong vựng đệm của mỏy tớnh và xử lý trực tiếp cỏc khung hỡnh thu đƣợc.
Hiện tại cú hai dạng cấu trỳc đối với mỗi file dữ liệu AVI: Đú là Cấu trỳc Chunks dwFourCC DWORD dwSize DWORD Data(dwSize) BYTE Cấu trỳc Lists dwList DWORD dwSize DWORD dwFourCC DWORD Data(dwSize-4) BYTE
Sau khi đó xỏc định đƣợc dạng cấu trỳc file, chỳng ta cú thể đọc cấu trỳc của HeaderFile để truy cập trực tiếp tới từng khung hỡnh trong file ảnh video.
typedef struct {
DWORD dwMicroSecPerFrame; // Tốc độ số khung hỡnh trờn giõy DWORD dwMaxBytesPerSec; // Tốc độ truyền dữ liệu trờn giõy
DWORD dwPaddingGranularity; // Gỏn số dũng sao cho tổng số dũng trờn mỗi khung hỡnh chia hết cho 4.
// size;
DWORD dwFlags; // the ever-present flags
DWORD dwTotalFrames; // Tổng số khung hỡnh; DWORD dwInitialFrames; DWORD dwStreams; DWORD dwSuggestedBufferSize; DWORD dwWidth; DWORD dwHeight; DWORD dwReserved[4]; } MainAVIHeader; 3.2. Tiền xử lý
Hiện nay hầu hết cỏc loại camera trờn thị trƣờng đều cho ảnh video là ảnh mầu chế độ NTSC, tuy nhiờn trong cỏc ứng dụng đối với hệ thống camera
giỏm sỏt chỳng ta chỉ quan tõm đến vị trớ và hỡnh dỏng của cỏc đối tƣợng. Mặt khỏc tốc độ phỏt hiện và theo vết đối tƣợng cũng cần phải giải quyết trong thời gian thực vỡ vậy việc biến đổi từ ảnh màu sang ảnh đa mức xỏm là cần thiết.
3.2.1. Biến đổi ảnh đa mức xỏm
Đơn vị tế bào của ảnh số là pixel. Tựy theo mỗi định dạng là ảnh màu hay ảnh xỏm mà từng pixel cú thụng số khỏc nhau. Đối với ảnh màu từng pixel sẽ mang thụng tin của ba màu cơ bản tạo ra bản màu khả kiến là Đỏ (R), Xanh lỏ cõy(G) và Xanh nƣớc biển (B) . Trong mỗi pixel của ảnh màu, ba màu cơ bản R, G và B đƣợc bố trớ sỏt nhau và cú cƣờng độ sỏng khỏc nhau. Thụng thƣờng, mỗi màu cơ bản đƣợc biểu diễn bằng tỏm bit tƣơng ứng 256 mức độ màu khỏc nhau. Nhƣ vậy mỗi pixel chỳng ta sẽ cú 28x3
=224màu (khoảng 16.78 triệu màu). Đối với ảnh xỏm, thụng thƣờng mỗi pixel mang thụng tin của 256 mức xỏm (tƣơng ứng với tỏm bit) nhƣ vậy ảnh xỏm hoàn toàn cú thể tỏi hiện đầy đủ cấu trỳc của một ảnh màu tƣơng ứng thụng qua tỏm mặt phẳng bit theo độ xỏm.
Trong hầu hết quỏ trỡnh xử lý ảnh, chỳng ta chủ yếu chỉ quan tõm đến cấu trỳc của ảnh và bỏ qua ảnh hƣởng của yếu tố màu sắc. Do đú bƣớc chuyển từ ảnh màu thành ảnh xỏm là một cụng đoạn phổ biến trong cỏc quỏ trỡnh xử lý ảnh vỡ nú làm tăng tốc độ xử lý là giảm mức độ phức tạp của cỏc thuật toỏn trờn ảnh.
Chỳng ta cú cụng thức chuyển cỏc thụng số giỏ trị màu của một pixel thành mức xỏm tƣơng ứng nhƣ sau:
G=α.CR+β.CG+δ.CBG (4.1) Trong đú cỏc giỏ trị CR,CG và CB lần lƣợt là cỏc mức độ màu Đỏ, Xanh lỏ cõy và Xanh nƣớc biển của pixel màu. Cỏc hệ số α, β,và δ là cỏc giỏ trị thay đổi tựy thuộc hệ màu. Trong Luận văn này chỳng tụi sử dụng hai loại camera thu nhận tớn hiệu video hệ NTSC nờn cỏc hệ số sẽ là:
α=0.29890, β=0.58662, δ=0.11448
Do đú cụng thức (4.1) trở thành:
Trong trƣờng hợp tổng quỏt, nếu nhƣ khụng biết chớnh xỏc cỏc camera cung cấp tớn hiệu theo hệ màu nào và kết quả xử lý cũng khụng quỏ quan trọng chớnh xỏc về phõn bố màu, chỳng ta cú thể biến đổi ảnh đa mức xỏm một cỏch đơn giản là trung bỡnh cộng của ba mức độ màu đỏ, xanh lỏ cõy và xanh nƣớc biển.
3.2.2. Toỏn tử nhõn chập
Trong kỹ thuật sử dụng bộ lọc, ngƣời ta sử dụng một mặt nạ và di chuyển khắp ảnh gốc. Tuỳ theo cỏch tổ hợp điểm đang xột với cỏc điểm lõn cận mà ta cú kỹ thuật lọc tuyến tớnh hay phi tuyến. Điểm ảnh chịu tỏc động của biến đổi là điểm cạnh của mặt nạ nhƣ trong phƣơng trỡnh (3.1) hoặc ở tõm mặt nạ nhƣ trong phƣơng trỡnh (3.2). Cỏc phƣơng trỡnh này đƣợc định nghĩa nhƣ phộp toỏn chập của tớn hiệu đầu vào X(m',n') với đỏp ứng xung h(m,n) : Y = H X. Tớch chập của hai ma trận số cú kớch thƣớc (M1 x N1) và (M2 x N2) là một ma trận cú kớch thƣớc (M1 + M2 -1, N1 + N2 -1). Tớch chập cú độ phức tạp tớnh toỏn rất cao. Để giảm độ phức tạp tớnh toỏn ngƣời ta thƣờng dựng nhõn chập H cú kớch thƣớc hữu hạn và nhỏ. Nhõn chập này thƣờng chọn kớch thƣớc lẻ với cỏc giỏ trị 3,5,7. Toỏn tử nhõn chập đƣợc sử dụng trong đa số cỏc bộ lọc khỏc nhau với nhõn chập H là vuụng. Tớch chập là một khỏi niệm rất quan trọng trong xử lý ảnh, đặc biệt là tớnh chất của nú cú liờn quan đến biến đổi Fourier. Vỡ vậy thuật toỏn tổng quỏt để tớnh tớch chập cần thiết đƣợc xõy dựng để dựng cho hầu hết cỏc bộ lọc số. Để hiểu sử dụng thuật toỏn này chỉ cần thay đổi 2 thụng số: ma trận biểu diễn ảnh số và ma trận biểu diễn nhõn chập. Thuật toỏn đƣợc mụ phỏng dƣới dạng Pascal nhƣ sau:
3.3. Phỏt hiện sai khỏc giữa cỏc khung hỡnh
Kỹ thuật trừ ảnh đƣợc ứng dụng để phỏt hiện sự sai khỏc giữa cỏc khung hỡnh. Trong chƣơng 3 đó trỡnh bày một số kỹ thuật trừ ảnh để phỏt hiện sự sai khỏc giữa cỏc khung hỡnh, tuy nhiờn thực tế cài đặt chỳng tụi thấy phƣơng phỏp trừ ảnh phõn khổi đƣợc ỏp dụng cú hiệu quả nhất. Tuy nhiờn cũng cần cú một số cải tiến. Thuật toỏn đƣợc trỡnh bày theo cỏc bƣớc sau:
B1: Lọc toàn ảnh bằng bộ lọc trung bỡnh.
B2: Chia ảnh thành cỏc khối nhỏ, mỗi khối kớch thƣớc 5 x 5 Pixel B3: Mỗi khối ảnh đƣợc lọc qua bộ lọc thụng thấp để hạn chế nhiễu B4: Trừ hai khung ảnh theo từng khối theo cụng thức 3.12 (ỏp dụng trừ ảnh phõn khối theo cụng thức của lƣợc đồ mức xỏm)
NhanChap(ImagIn, ImagOut: Ảnh, H: Nhõn chập, N: Kớch thƣớc ảnh, W: Kớch thƣớc nhõn chập) /* Vào : Ảnh số :ImagIn Nhõn chập H Ra : ImagOut */ Begin For i: =1 to N For j: = 1 to N do Begin Sum:= 0; Lc:= (w+1) div 2; For k:= 1 to w do For l:= 1 to w do Begin Col:= i - k + lc; Row:= j + l + lc;
if (Col <> 0) and (Col <= N) Then if (Row <> 0) and (Row <=N) then Sum:= Sum + ImagIn[Col,Row] * H[k,l]; End;
ImagOut[i,j] := Sum; End;
B5: Xỏc định ngƣỡng thớch nghi đối với mỗi khối. Hai khối đƣợc gọi là tƣơng tự nhau khi và chỉ khi sau khi cú đƣợc ảnh hiệu của hai khối khụng cú cỏc điểm đen rời rạc.
B6: Nếu số cỏc khối ảnh khỏc nhau lớn hơn một ngƣỡng nào đú thỡ cú sự sai khỏc giữa hai khung hỡnh và cú thể cú đối tƣợng xuất hiện trong khung hỡnh.
Kết quả của bƣớc phỏt hiện sự sai khỏc giữa cỏc khung hỡnh và phỏt hiện đối tƣợng đƣợc minh hoạ nhƣ trong hỡnh 4.1
3.4. Phỏt hiện đối tƣợng xuất hiện trong khung hỡnh
Sau khi đó phỏt hiện đƣợc sự sai khỏc giữa khung hỡnh nền và khung hỡnh hiện tại, tức là đó cú xuất hiện đối tƣợng trong vựng camera quan sỏt đƣợc. Hệ thống cần thực hiện cỏc thủ tục sau để cú thể phỏt hiện chớnh xỏc cú đối tƣợng xuất hiện hay khụng?
- Sử dụng bộ lọc thụng cao để loại bỏ cỏc vựng điểm rời rạc do nhiễu và tỏch cỏc đối tƣợng dớnh nhau do búng.
- Cú thể sử dụng phƣơng đơn giản là dựng cỏc hỡnh chiếu dọc và ngang để định vị đƣợc vị trớ của đối tƣợng. Phƣơng phỏp này cho kết quả nhanh tuy
(a) (b)
(c)
Hỡnh 4.1:
nhiờn khi cú nhiều đối tƣợng thỡ khụng hiệu quả, đặc biệt khi hỡnh chiếu của cỏc đối tƣợng giao nhau.
- Sau khi đó cú đƣợc ảnh nền, ta cú thể xỏc định điểm thuộc đối tƣợng chuyển động bằng cỏch so sỏnh sự chờnh lệch màu sắc giữa điểm đú và điểm cựng vị trớ trờn ảnh nền. Kết hợp với một số kỹ thuật heuristic nhƣ: loại bỏ những vựng cú mật độ điểm chuyển động thƣa thớt, tỏch cỏc đối tƣợng bị dớnh nhau do búng, điều chỉnh khung detect cho sỏt với kớch thƣớc thực của đối tƣợng, cựng với thuật toỏn “vết dầu loang” để tỡm cỏc vựng liờn thụng, cuối cựng cú đƣợc danh sỏch cỏc đối tƣợng .
Thuật toỏn vết dầu loang
void loang(int i,int j,int a[100][100],int n) int dem,dong,cot; int ld[4]; int lc[4]; ld[0]=1;ld[1]=0;ld[2]=-1;ld[3]=0; lc[0]=0;lc[1]=1;lc[2]=0;lc[3]=-1; a[i][j]=2; for (dem=0;dem<4;dem++) { Dong=i+ld[dem]; cot=j+lc[dem]; if (dong>=0&&cot>=0&&dong if (a[dong][cot]==1) loang(dong,cot,a,n);}
í tƣởng cơ bản của thuật toỏn là xuất phỏt từ một điểm, kiểm tra điểm lõn cận cú liờn thụng hay khụng. Nếu cú thỡ điểm lõn cận đú đƣợc coi là điểm xuất phỏt. Thuật toỏn đƣợc viết theo dạng đệ qui giỳp ngƣời đọc dễ dàng nắm đƣợc ý tƣởng chớnh của thuật toỏn.
Chỳ ý với một điểm trờn ảnh, chỳng ta cú thể xột 4 hoặc 8 điểm lõn cận.
Thuật toỏn phỏt hiện đối tượng
B1: Khởi tạo danh sỏch cỏc đối tƣợng ObjectList = Detect(Ic) B2: Tớnh ma trận “điểm chuyển động”
- CPM(x) = 1 nếu mật độ điểm chuyển động lõn cận x trờn MPM > Ngƣỡng liờn thụng
- Ngƣợc lại CPM(x) = 0 B4:Tỡm danh sỏch cỏc vựng liờn thụng
CPLits = VetDauLoang(CPM)
Nếu kớch thƣớc CPList(i) với i = 1,... số vựng liờn thụng” > Ngƣỡng kớch thƣớc và mật độ điểm chuyển động trong CPList(i) > Ngƣỡng mật độ thỡ ghi nhận CPList(i) là một đối tƣợng đƣợc phỏt hiện:
Đƣa CPList(i) vào ObjectList
3.5. Nhận dạng đối tƣợng bằng mụ hỡnh mạng nơron
Nhƣ đó trỡnh bày trong chƣơng 3, kế thừa cỏc kết quả nghiờn cứu từ cỏc Luận văn trƣớc, chỳng tụi lựa chọn mạng nơron lan truyền ngƣợc hƣớng cho việc phõn loại đối tƣợng vào một trong hai lớp đối tƣợng và khụng phải đối tƣợng.
Cấu trỳc của mạng nơron lan truyền ngƣợc hƣớng đƣợc xỏc định là hai số nguyờn xỏc định số biến của tớn hiệu vào và số nơron trờn lớp Kohonen. Cỏc trọng số của cỏc nơron trong mạng đƣợc lƣu trữ trờn một bảng tuyến tớnh cấp phỏt động W ( ). Việc tớnh địa chỉ cho từng trọng số trong bảng tuyến tớnh này đƣợc thực hiện bởi một hàm phụ trợ wIndex(j, i) sẽ đƣợc mụ tả kỹ trong phần giải thuật. Việc làm này rất thuận lợi cho việc mó hoỏ và giải mó bộ trọng số thành một chuỗi phục vụ cho quỏ trỡnh học của mạng. Bảng trọng số này đƣợc cấp phỏt nhƣ một bảng toàn cục:
a.Tổ chức số liệu và lưu trữ
Ngoài ra chỳng ta cần một bảng toàn cục Out ( ) để lƣu trữ cỏc tớn hiệu ra của cỏc nơron. Cũng nhƣ bảng lƣu trữ trọng số bảng lƣu trữ tớn hiệu ra này là một bảng tuyến tớnh việc tớnh địa chỉ cho từng nơron đƣợc thực hiện qua một hàm phụ trợ kIndex (l, j).
Số liệu thực nghiệm đƣợc tổ chức trong một tệp số liệu, tốt nhất là đƣợc tổ chức trong file dữ liệu Binary. Số liệu đƣợc lƣu trữ bao gồm vectơ vào của mỗi ảnh đối tƣợng tức là mảng một chiều Input ( ) và một giỏ trị số nguyờn lƣu trữ giỏ trị 0 tƣơng ứng với lớp khụng phải đối tƣợng và 1 tƣơng ứng với lớp đối tƣợng. Đối với số liệu để học thỡ là một file dữ liệu cần lƣu trữ tƣơng ứng với hai lớp cần phõn loại.
Đối với file lƣu trữ cỏc trọng số của cỏc nơron và tớn hiệu ra của cỏc nơron là một giỏ trị nguyờn với cỏc giỏ trị 0 và 1 tƣơng ứng với 2 lớp. Ngoài ra file dữ liệu này cũn đƣợc ghi cỏc tham số của mạng nhƣ độ lớn của mạng, cỏc hằng số học, số lần học.
Túm lại chƣơng trỡnh cần 2 file dữ liệu cú cấu trỳc nhƣ sau: File lƣu trữ số liệu mẫu:
Private Type File data Input () as Single Char as Integer End Type
File lƣu trữ trọng số của mạng Private Type FileNet
W() as Single Out () as Integer Rong as Integer Dài as Integer Amax as Single Amin as Single So_lan_hoc as Double End Type
b. Tuyến tớnh hoỏ số liệu
* Chức năng: Thực hiện việc biến đổi số liệu cho phự hợp với quỏ trỡnh làm việc của mạng nơron lan truyền ngƣợc hƣớng
Vào: Mảng động một chiều TH() lƣu trữ giỏ trị lấy mẫu của một chu kỳ tớn hiệu
Ra: Mảng một chiều XR() cú độ dài cố định lƣu trữ cỏc thành phần của vectơ vào.
* Giải thuật: Với mỗi phần tử thứ i của mảng XR () cần xỏc định hai phần tử thứ j và j+1 của mảng TH () sao cho TH(j) XR(i) TH(j+1)
Giả sử số phần tử của mảng TH () là M và số phần tử của mảng XR () là N, khi đú phần tử thứ j của TH () và XR (j) đƣợc xỏc định nhƣ sau:
b = M-1 b = i * b j = b \ (N – 1) a = b / (N – 1) – j XR (i) = TH (j) + a * c +) Tỡm giỏ trị max của mảng XR() +) Quy chuẩn XR(i): =XR(i) / Max
c. Thủ tục học cú chỉ đạo của mạng nơron lan truyền ngược hướng
- Chức năng: Thực hiện quỏ trỡnh học cú chỉ đạo của mạng nơron lan truyền ngƣợc hƣớng bao gồm quỏ trỡnh học tự tổ chức của lớp Kohonen và quỏ trỡnh tự học cú chỉ đạo của lớp ra.
- Vào: Mảng một chiều XS () lƣu trữ cỏc tập mẫu và mảng một chiều YS () lƣu trữ lớp lời giải.
- Ra: Mảng hai chiều W () lƣu trữ trọng số của cỏc nơron trờn lớp Kohonen và mảng hai chiều C () lƣu trữ trọng số của cỏc nơron trờn lớp ra.
- Giải thuật:
+) Khởi động mạng
+) Thả một tớn hiệu vào XS đi vào lớp Kohonen. +) Xỏc định nơron trung tõm
+) Hiệu chỉnh tất cả trọng số của cỏc nơron trờn lớp Kohonen +) Thả lời giải YS đi vào mạng theo hƣớng ngƣợc lại để hiệu chỉnh cỏc trọng số của cỏc nơron trờn lớp ra
* Khởi động mạng
- Vào: Mảng hai chiều W () lƣu trữ cỏc giỏ trị trọng số của cỏc nơron trờn lớp Kohonen.
- Ra: Mảng hai chiều W () - Giải thuật:
Xỏc định chiều dài, chiều rộng của mảng W () tƣơng ứng là WD và WR.
Khởi gỏn cỏc giỏ trị ngẫu nhiờn cho cỏc phần tử của mảng For i: = 1 to WR do
For j: = 1 to WR do W (i, j): = RND;
* Xỏc định nơron trung tõm
- Chức năng: Đối với mỗi một đối tƣợng đƣợc thả vào mạng cần phải xỏc định nơron trung tõm sao cho vectơ trọng số của nơron đú giống với tớn hiệu vào nhất.
- Vào: Mảng một chiều XS () lƣu trữ vector vào của tập mẫu - Ra: Số nguyờn xỏc định vị trớ của nơron trung tõm
- Giải thuật: Tớnh hàm khuếch đại đối với mỗi nơron của mạng Giả thiết mạng Kohonen cú ma trận trọng số W(i, j), cỏc tớn hiệu vào cú m biến
XS = { XS (1), XS (2), ..., XS (m)}
Khi đú hàm khuếch đại của N nơron trờn lớp Kohonen đƣợc xỏc định.
KD(j) = n i j i W i XS 1 2 )) , ( ) ( (
Tỡm giỏ trị nhỏ nhất của hàm khuếch đại KD (j). Chỉ số của hàm