PIC Vietnam

Go Back   PIC Vietnam > Robotics > Xử lý ảnh

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

Xử lý ảnh Các thuật toán xử lý ảnh dùng trong robot

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 17-04-2007, 02:03 AM   #1
thanh_nam1977
Đệ tử 2 túi
 
thanh_nam1977's Avatar
 
Tham gia ngày: Apr 2007
Nơi Cư Ngụ: Ho Chi Minh
Bài gửi: 27
:
Send a message via Yahoo to thanh_nam1977
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;
File Kèm Theo
File Type: doc Tach bien anh mau.doc (321.5 KB, 1198 lần tải)
thanh_nam1977 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-06-2007, 01:21 AM   #2
dongbacphong
Nhập môn đệ tử
 
Tham gia ngày: May 2007
Bài gửi: 1
:
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á.
dongbacphong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-06-2007, 10:15 PM   #3
thanh_nam1977
Đệ tử 2 túi
 
thanh_nam1977's Avatar
 
Tham gia ngày: Apr 2007
Nơi Cư Ngụ: Ho Chi Minh
Bài gửi: 27
:
Send a message via Yahoo to thanh_nam1977
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é
File Kèm Theo
File Type: rar CHUONGTRINH.rar (1.8 KB, 706 lần tải)
thanh_nam1977 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-09-2007, 06:45 PM   #4
tranhuuduy1981
Nhập môn đệ tử
 
Tham gia ngày: Sep 2007
Bài gửi: 5
:
Không download được!

Trích:
Nguyên văn bởi thanh_nam1977 View Post
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.
tranhuuduy1981 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-01-2008, 07:35 PM   #5
pnhung666
Nhập môn đệ tử
 
Tham gia ngày: Jan 2008
Bài gửi: 3
:
Cam on ban rat nhieu
pnhung666 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-10-2008, 10:50 PM   #6
cuc ia
Nhập môn đệ tử
 
Tham gia ngày: Oct 2008
Bài gửi: 2
:
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.
cuc ia vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-11-2008, 10:59 AM   #7
nguyenbadat
Nhập môn đệ tử
 
Tham gia ngày: Nov 2008
Bài gửi: 1
:
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!
nguyenbadat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-11-2009, 10:26 AM   #8
cunau
Nhập môn đệ tử
 
Tham gia ngày: Nov 2009
Bài gửi: 2
:
Cảm ơn bạn Thanh_nam1977 nhiều.
Mình đúng là đang cần chương trình này
cunau vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-01-2011, 12:39 AM   #9
nhanconan030789
Đệ tử 3 túi
 
Tham gia ngày: Mar 2009
Bài gửi: 49
:
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!!
nhanconan030789 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-12-2011, 10:57 AM   #10
minhluan3010
Nhập môn đệ tử
 
Tham gia ngày: Dec 2011
Bài gửi: 1
:
e dang nghieng cuu tach bien anh trang den.may a giup e voi.
minhluan3010 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


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


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam