PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Xử lý ảnh (http://www.picvietnam.com/forum/forumdisplay.php?f=51)
-   -   Tách Biên Ảnh Màu-Color Edge Detector (http://www.picvietnam.com/forum/showthread.php?t=1062)

thanh_nam1977 17-04-2007 02:03 AM

Tách Biên Ảnh Màu-Color Edge Detector
 
1 Attachment(s)
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;

dongbacphong 11-06-2007 01:21 AM

Bạn ơi cho mình code của bạn nhé. bạn có thể giải thích cách làm và cách thực hien , giải quyết khi dung thuật toán này cho minh hiểu rõ hơn được không. Cảm ơn bạn. Mà chỉ cho mình hiểu các câu lệnh đó là như thế nào nhé. Thế thì minh mới có thể hiểu được bạn làm thế nào chứ. Làm phiền bạn quá.

thanh_nam1977 11-06-2007 10:15 PM

1 Attachment(s)
Mình gửi code yêu cầu cho bạn.Lần sau, nếu có những vấn đề như thế thì nên gửi mesage riêng thôi nhé

tranhuuduy1981 27-09-2007 06:45 PM

Không download được!
 
Trích:

Nguyên văn bởi thanh_nam1977 (Post 9316)
Mình gửi code yêu cầu cho bạn.Lần sau, nếu có những vấn đề như thế thì nên gửi mesage riêng thôi nhé

Em không download cái này được. Nó cứ hiện lên file .php không à. Em dùng trình download Orbit.

pnhung666 10-01-2008 07:35 PM

Cam on ban rat nhieu

cuc ia 18-10-2008 10:50 PM

có ai có tài liệu về cấu tạo và nguyên lý hoạt động của các loại cảm biến không cho minh xin .Mình đang làm tiểu luận về các loại cảm biến.

nguyenbadat 15-11-2008 10:59 AM

mình mới nghiên cứu về tách biên ảnh nên cũng không hiểu nhiều về tách biên ảnh màu. Mình nghĩ là tách biên ảnh trắng đen sẽ dễ hơn. Vậy bạn nào có tìm hiểu về tách biên ảnh trắng đen thì giúp mình với! thanks nhiều!

cunau 26-11-2009 10:26 AM

Cảm ơn bạn Thanh_nam1977 nhiều.
Mình đúng là đang cần chương trình này

nhanconan030789 03-01-2011 12:39 AM

mình có chút thắc mắc mong bạn giúp đỡ!! từ một ảnh màu có n đối tượng,qua các bước xử lý,ta có thể xác định được từng đối tượng trong đó,tuy nhiên các đối tượng có kích thước khác nhau,yêu cầu là phải tạo được một hình chử nhật bao quanh từng đối tượng,sau đó lấy ra một mảng chứa các hình chử nhật này ,vậy làm thế nào để các ảnh này có cùng kích thước,không làm mất các pixel trong mỗi ảnh?
hay đơn giản nhất là hàm gì trong matlab dùng để thay đổi size ảnh!!rất mong sự giúp đỡ từ bạn!!

minhluan3010 02-12-2011 10:57 AM

e dang nghieng cuu tach bien anh trang den.may a giup e voi.


Múi giờ GMT. Hiện tại là 07:00 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam