Tìm vết của biên (Boundary Tracing )

Một phần của tài liệu Matlab Cho Xử Lý Ảnh (Trang 107 - 111)

VI – Phân tích và làm giàu ản h( nâng cao chất lượng ản h)

b-Tìm vết của biên (Boundary Tracing )

- Toolbox cung cấp hai hàm ta có thể sử dụng để tìm biên của các đối tượng trong một ảnh :

+ Hàm bwtraceboundary + Hàm bwboundaries

- Hàm bwtraceboundary trả lại toạ độ hàng và cột của tất cả các pixel trên biên của một đối tượng trong ảnh . Ta phải chỉ ra vị trí của một pixel biên trên đối tượng như là điểm bắt đầu của việc tìm vết .

- Hàm bwboundaries trả lại toạ độ hàng và cột của các pixel biên của tất cả các đối tượng trong một ảnh

- Với cả hai hàm , các pixel khác 0 thuộc về một đối tượng và pixel với giá trị 0 ( zero ) tạo thành nền ( background )

- Ví dụ sau sử dụng hàm bwtraceboundary để tìm vết của đường bao của một đối tượng trong một ảnh nhị phân sau đó sử dụng hàm bwboundaries để tìm vết của đường bao của tất cả các đối tượng trong ảnh :

1. Đọc vào một ảnh và hiển thị nó I = imread('coins.png');

imshow(I)

2. Chuyển ảnh thành một ảnh nhị phân . Hàm bwtraceboundary và hàm bwboundaries chỉ làm việc trên các ảnh nhị phân

BW = im2bw(I); imshow(BW)

3. Tính các toạ độ hàng và cột của

một pixel trên biên của đối tượng ta

muốn tìm vết . bwboundary sử

dụng điểm này như là điểm bắt đầu của việc tìm vết . dim = size(BW)

col = round(dim(2)/2)-90; row = min(find(BW(:,col)))

4. Gọi hàm bwtraceboundary để tìm vết của biên từ điểm đã chọn . Như một tham số cần thiết , ta phải chỉ ra một ảnh nhị phân , các toạ độ hàng và cột của điểm bắt đầu và hướng của bước đầu tiên . Ví dụ chỉ ra hướng bắc ( North )

boundary=bwtraceboundary (BW, [row ,col],’N’);

5. Hiển thị ảnh gốc và sử dụng các toạ độ trả về để vẽ đồ thị trên ảnh imshow(I)

hold on;

6. Đề tìm vết của tất cả các đường biên của tất cả các đối tượng trong ảnh , sử dụng hàm bwboundaries . Theo mặc định , hàm này tìm biên của tất cả các đối tượng trong một ảnh bao gồm các đối tượng trong các vật khác . Trong ảnh nhị phân được sử dụng trong ví dụ này , một số đồng tiền chứa vùng màu đen mà hàm bwboundaries hiểu như các đối tượng riêng biệt . Để chắc chắn rằng hàm bwboundaries chỉ tìm vết với những đồng tiền , sử dụng hàm imfill để tô vùng trong mỗi đồng tiền

BW_filled = imfill(BW,'holes');

boundaries = bwboundaries(BW_filled);

Hàm bwboundaries trả về một mảng mà mỗi phần tử chứa các toạ độ hàng , cột của mỗi đối tượng trong ảnh .

7. Vẽ các đường biên của tất cả các đồng tiền trên ảnh gốc sử dụng các toạ độ trả về từ hàm bwboundaries

for k=1:10

b = boundaries{k};

plot(b(:,2),b(:,1),'g','LineWidth',3); end

Chọn bước đầu tiên và hướng cho việc tìm vết

- Với một số đối tượng , ta phải quan tâm khi lựa chọn pixel làm điểm xuất phát và hướng làm bước đầu tiên ( North , South…)

- Chẳng hạn , nếu một đối tượng chứa một lỗ và ta chọn một pixel trên một phần mỏng của đối tượng làm điểm xuất phát , ta có thể tìm vết biên ngoài của đối tượng hoặc biên trong của lỗ phụ thuộc vào hướng ta chọn cho bước đầu tiên . Với các vật được tô , hướng mà ta chọn cho bước đầu tiên không quan trọng

- Để minh hoạ , hình sau đây chỉ ra các pixel đã được tìm vết khi pixel xuất phát trên một phần mỏng của vật và bước đầu tiên ( first step ) được thiết lập là north hoặc south . (adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu Matlab Cho Xử Lý Ảnh (Trang 107 - 111)