|
Tài trợ cho PIC Vietnam |
Xử lý ảnh Các thuật toán xử lý ảnh dùng trong robot |
|
Ðiều Chỉnh | Xếp Bài |
17-04-2007, 02:03 AM | #1 |
Đệ tử 2 túi
|
Tách Biên Ảnh Màu-Color Edge Detector
Biên là sự liên kết giữa 2 vùng có mức xám tương đối khác nhau. Tư tưởng cơ bản của kỹ thuật tách biên là tính vi phân cục bộ. Vi phân bậc 1 tại bất kỳ 1 điểm trong 1 ảnh được thực hiện bằng cách dùng biên độ Gradient tại điểm đó. Vi phân tương tự được thực hiện bằng Laplace.
Ý tưởng cơ bản đằng sau tách biên là tìm các nơi trong ảnh có cường độ thay đổi nhanh, sử dụng một trong hai tiêu chuẩn tổng quát sau: •Tìm các nơi đạo hàm bậc nhất của cường độ sáng có biên độ hơn một ngưỡng. •Tìm các nơi đạo hàm bậc hai của cường độ sáng có chỗ chéo 0. Các hàm biên của IPT (Image Processing Toolbox) cung cấp một số ước lượng đạo hàm dựa trên các tiêu chuẩn mới nói tới. Đối với một số trong những ước lượng này, có thể xác định bộ tách biên có nhạy với các biên ngang hay biên dọc hay không hoặc cả hai. Cấu trúc tổng quát của hàm này là [g, t] = edge (f, ‘method’, parameters) Trong đó f là ảnh đầu vào, method là một trong các phương pháp được liệt kê trong bảng 1, và parameters là các tham số thêm vào được giải thích sau. Trong ngõ ra, g là mảng logic với các giá trị 1 tại các vị trí các điểm biên được tách và 0 khi không được tách. Tham số t là tùy chọn, nó cho ngưỡng được dùng bởi biên để xác định các giá trị gradient đủ mạnh để được gọi là các điểm biên. Các bộ tách biên 1.Sobel Bộ tách biên Sobel sử dụng các mặt nạ để xấp xỉ đạo hàm bậc nhất và . Nói cách khác, gradient tại điểm tâm trong một lân cận được tính theo bộ tách Sobel Bộ tách biên Sobel có thể được thực hiện bằng cách lọc một ảnh, f, (dùng imfilter) với mặt nạ , lọc lại f với mặt nạ khác, bình phương các giá trị pixel với mỗi ảnh được lọc, cộng hai kết quả, và tính căn bậc hai. Các chú thích tương tự đối với các phần thứ 2 và thứ 3 trong bảng 1. Hàm edge đơn giản các gói toán tử trước thành một hàm gọi và thêm vào các dặc tính khác, chẳng hạn như chấp nhận một giá trị ảnh ngưỡng hoặc xác định ngưỡng một cách tự động. Thêm vào đó, edge chứa các kỹ thuật tách biên không hiện thực trực tiếp được bằng imfilter Cú pháp gọi bộ tách Sobel tổng quát là [g , t ] = edge(f, ‘sobel’, T, dir) Trong đó f là ảnh đầu vào, T là ngưỡng được chỉ định và dir xác định hướng cần tính tách biên: ‘ngang’, ‘dọc’ hoặc cả hai. Như đã nói, g là ảnh logic chứa giá trị 1 tại những nơi biên được tách và giá trị 0 tại những nơi biên được tách. Tham số t trong ngõ ra là tùy chọn. Nó là giá trị ngưỡng được dùng bởi edge. Nếu T dược chỉ định thì t = T. Mặt khác nếu T không được chỉ định (hoặc để rỗng []), f sẽ đặt t bằng với ngưỡng do nó tự động xác định và sau đó sử dụng cho việc tách biên. một trong những lý do cơ bản cho việc gộp t trong tham số ngõ ra là để nhận giá trị khởi tạo cho ngưỡng. Hàm edge sử dụng bộ tách Sobel mặc định nếu cú pháp g = edge (f), hoặc là [g, t] = edge(f). 2.Bộ tách biên Prewitt Bộ tách biên Prewitt sử dụng mặt nạ trong hình 1(c) để xấp xỉ theo phương pháp số đạo hàm bậc nhất và . Cú pháp gọi tổng quát là: [g , t ] = edge(f, prewitt, T, dir) Tham số hàm này đồng nhất với tham số Sobel. Bộ tách Prewitt hơi đơn giản hơn để hiện thực bằng máy tính so với bộ tách Sobel, nhưng nó có khuynh hướng sinh ra một chút nhiễu. (Nó có thể được thể hiện qua hệ số 2 trong bộ tách biên làm trơn) 3.Bộ tách biên Roberts Bộ tách biên Roberts sử dụng mặt nạ trong hình 1(d) để xấp xỉ theo phương pháp số đạo hàm bậc nhất và . Cú pháp gọi tổng quát là: [g , t ] = edge(f, roberts, T, dir) Tham số hàm này đồng nhất với tham số Sobel. Bộ tách Roberts là một trong những bộ tách biên xưa nhất trong xử lý ảnh số và theo hình 1(d), nó cũng đơn giản nhất. Bộ tách biên này được dùng ít hơn đáng kể các bộ tách khác do chức năng giới hạn của nó (ví dụ, nó không đối xứng và không thể được tổng quát hóa để tách biên là thừa số của 450). Tuy nhiên, nó vẫn được dùng thường xuyên trong hiện thực phần cứng khi tính đơn giản và tốc độ là các yếu tố chi phối. 4.Bộ tách biên Canny Bộ tách biên Canny (Canny [1986]) là bộ tách biên mạnh nhất cung cấp bởi hàm edge. Cú pháp bộ tách biên Canny là: [g , t ] = edge(f, canny, T, sigma) Trong đó T là một vectơ, là 2 ngưỡng được giải thích trong bước 3 của thủ tục trước và sigma là độ lệch chuẩn của bộ lọc làm trơn. Nếu t gộp vào thông số ngõ ra, nó là vectơ 2 phần tử chứa 2 giá trị ngưỡng được dùng bởi thuật toán. Cú pháp đơn giản được giải thích như các phương pháp khác, bao gồm việc tự động tính toán T nếu nó không được cung cấp. Giá trị mặc định của sigma là 1. Chương trình M_File 1. Hàm colorgrad function[VG,A,PPG]=colorgrad(f,dec,T) %COLORGRAD TINH VECTO GRADIENT CUA MOT ANH MAU RGB. %function[VG,A,PPG]=colorgrad(f,T) tinh vector gradient,VG, va mang goc %tuong ung,VA, (don vi radians) cua anh RGB f. No cung tinh PPG, gradient %ket hop tu cac vung mau ma co duoc bang cach cong cac gradient hai chieu %cua cac vung mau don. Ngo vao T la muc nguong trong tam [0 1]. Neu no duoc %xac dinh trong bien ngo vao thi gia tri cua VG va PPG duoc lay nguong bang %cach tao ra VG(x,y)=0 khi gia tri <=T va VG(x,y) =VG(x,y)doi voi gia tri %khac.Nhung lenh tuong tu cung duoc ung dung cho PPG. Neu T khong xac dinh %trong doi so vao thi T duoc set = 0. Ca hai gradient ngo ra duoc xac dinh %trong tam [0 1] %dec la loai mat na if (ndims(f)~=3)| (size(f,3)~=3) error('Input image must be RGB'); end %Tinh toan vi phan theo phuong x va y cua ba anh thanh phan su dung toan tu %Mat na sh=fspecial(dec); sv=sh'; Rx=imfilter(double(f(:,:,1)),sh,'replicate'); Ry=imfilter(double(f(:,:,1)),sv,'replicate'); Gx=imfilter(double(f(:,:,2)),sh,'replicate'); Gy=imfilter(double(f(:,:,2)),sv,'replicate'); Bx=imfilter(double(f(:,:,3)),sh,'replicate'); By=imfilter(double(f(:,:,3)),sv,'replicate'); %Tinh cac thong so cua vec to gradient gxx=Rx.^2+ Gx.^2+ Bx.^2; gyy=Ry.^2+ Gy.^2+ By.^2; gxy=Rx.*Ry+ Gx.*Gy+ Bx.*By; A=0.5*(atan(2*gxy./(gxx-gyy+eps))); G1=0.5*((gxx+gyy)+(gxx-gyy).*cos(2*A)+2*gxy.*sin(2*A)); %Bay gio lap lai voi goc + pi/2. Sau do chon gia tri cuc dai tai moi diem. A = A+pi/2; G2=0.5*((gxx+gyy)+(gxx-gyy).*cos(2*A)+2*gxy.*sin(2*A)); G1=G1.^0.5; G2=G2.^0.5; %Tinh VG bang cach lay gia tri cuc dai tai moi diem (x,y)va sau do chuan hoa % trong khoang [0 1] VG=mat2gray(max(G1,G2)); %Tinh toan cac gradient tren tung vung mau RG=sqrt(Rx.^2+Ry.^2); GG=sqrt(Gx.^2+Gy.^2); BG=sqrt(Bx.^2+By.^2); %Thuc hien viec tong hop bang cach cong cac ket qua rieng biet va chuan hoa %trong khoang [0 1] PPG=mat2gray(RG+GG+BG); %Tinh ket qua khi co nguong if nargin==3 VG=(VG>T).*VG; PPG=(PPG>T).*PPG; end %Ket thuc ham colorgrad 2 Chương trình tách biên ảnh màu %file thuc hien tach bien anh mau clc; close all; clear all; f=imread('lacda.jpg'); T=0.5; figure(1); subplot(3,1,1); imshow(f); str={['RGB image, threshold T=' num2str(T)]}; title(str); [VG_S,A_S,PPG_S]=colorgrad(f,'sobel',T); subplot(3,1,2); imshow(VG_S); title('Sobel mask'); hold on; [VG_P,A_P,PPG_P]=colorgrad(f,'prewitt',T); subplot(3,1,3); imshow(VG_P); title('Prewitt mask'); hold on; |
|
|