Professional Documents
Culture Documents
Tháng 3/2011
Khái niệm & Ứng dụng
Phân vùng ảnh là quá trình phân tách các cấu trúc quan
tâm ra khỏi nền (background) hoặc ra khỏi các cấu trúc
khác.
Ứng dụng:
Xác định (vị trí) và định lượng (diện tích, thể tích, số lượng)
– Các khối u, các vùng bất thường (trong ảnh Xquang, CT, MRI)
– Các mạch máu (ảnh DSA)
– Các vùng màu đỏ - xanh (trong ảnh Siêu âm Doppler)
– Các nhiễm sắc thể, tế bào máu (ảnh vi thể)…
Tiền xử lý trước khi nhận dạng ảnh
Tiền xử lý trước khi hợp nhất ảnh
Tiền xử lý trước khi tái tạo 3D
Làm thế nào để phân vùng ảnh?
Ngưỡng đơn
Đa ngưỡng
1. Phân vùng dựa vào sự tương tự về cường độ
Matlab code
%Ví dụ đặt ngưỡng đơn
I = imread('rice.png');
BW = im2bw(I); %hay BW = im2bw(I,0.5); %ngưỡng: 0.5*255 = 128
BW1 = im2bw(I,0.3); %ngưỡng: 0.3*255 = 77
BW2 = im2bw(I,0.7); %ngưỡng: 0.7*255 = 179
imshow(I);
figure; imshow(BW);
figure; imshow(BW1);
figure;imshow(BW2);
%BW, BW1, BW2 là các ảnh nhị phân đóng vai trò là các mask (mặt nạ)
I BW BW1 BW2
1. Phân vùng dựa vào sự tương tự về cường độ
Matlab code
%Dùng mask đã có để hiển thị ảnh theo từng vùng
J1=I.*uint8(BW); %hiển thị ra vùng có cường độ >=128
J2=I.*uint8(~BW); %hiển thị ra vùng có cường độ <128
imshow(J1);
figure;imshow(J2);
%Ngưỡng đôi:
J3=I.*uint8(xor(BW1, BW2)); %vùng có cường độ >=77 và <179
J4=I.*uint8(~xor(BW1, BW2)); %vùng có cường độ >=179 và <77
imshow(J3);
figure;imshow(J4);
I J1 J2 J3 J4
1. Phân vùng dựa vào sự tương tự về cường độ
Ngưỡng sẽ chọn
Ngưỡng tối ưu
1. Phân vùng dựa vào sự tương tự về cường độ
- Thuật toán: đầu tiên chọn 4 pixels ở 4 góc ảnh (có khả năng là background
cao nhất) gán vào vùng B. Các pixels còn lại gán vào vùng O. Cập nhật T.
Sau khi cập nhật giá trị T ta sẽ được 2 vùng mới. Tiếp tục cập nhật T cho đến
khi T không đổi nữa.
1. Phân vùng dựa vào sự tương tự về cường độ
Matlab code
%Ví dụ đặt ngưỡng tự động theo kỹ thuật
Otsu
I = imread('saturn.png');
I = rgb2gray(I); %đổi ra ảnh thang xám
BW1 = im2bw(I,0.0667); %T=17
BW2 = im2bw(I, 0.5); %lấy ngưỡng ở giữa
BW3 = im2bw(I, graythresh(I)); %tìm
ngưỡng bằng kỹ thuật Otsu
imshow(I);figure;imshow(BW1);figure;ims
how(BW2);
1. Phân vùng dựa vào sự tương tự về cường độ
Matlab code
1. Phân vùng dựa vào sự tương tự về cường độ
Tiếp tục chia nếu gặp vùng hầu như đồng nhất
1. Phân vùng dựa vào sự tương tự về cường độ
Seed
1. Phân vùng dựa vào sự tương tự về cường độ
Matlab code
1. Phân vùng dựa vào sự tương tự về cường độ
trong vùng)
Những điểm mà tại đó giả sử có 1 hạt nước rơi xuống thì hạt nước đó sẽ
Watershed lines
1. Phân vùng dựa vào sự tương tự về cường độ
%Tạo ra ảnh binary có hình dạng số 8 như hình bên Matlab code
center1 = -10;
center2 = -center1;
dist = sqrt(2*(2*center1)^2);
radius = dist/2 * 1.4;
lims = [floor(center1-1.2*radius) ceil(center2+1.2*radius)];
[x,y] = meshgrid(lims(1):lims(2));
bw1 = sqrt((x-center1).^2 + (y-center1).^2) <= radius;
bw2 = sqrt((x-center2).^2 + (y-center2).^2) <= radius;
bw = bw1 | bw2;
figure, imshow(bw,'InitialMagnification','fit'), title('bw')
%Tạo ra phân bố cường độ sáng khác nhau trong vùng vừa tạo bằng cách dùng hàm
bwdist - giá trị cường độ sáng tại 1 pixel chính là khoảng cách từ pixel đó đến
pixel khác 0 gần nhất => tạo ra hình thứ 2 ở bên (có dạng như 2 quả núi chồng
lên nhau)
D = bwdist(~bw);
figure, imshow(D,[],'InitialMagnification','fit')
title('Distance transform of ~bw')
%Tuy nhiên ta cần tạo ra 2 thung lũng chứ không phải 2 quả núi, nên ta đảo giá trị lại.
Vùng nằm ngoài hình số 8 sẽ có giá trị -, chổ đỉnh núi giờ là đỉnh đáy của thung lũng
D = -D;
D(~bw) = -Inf;
figure, imshow(D,[],'InitialMagnification','fit')
title('Distance transform of ~bw')
%Nước dâng lên từ đáy thung lũng. Đường giao giữa 2 vùng nước khác nhau chính là
đường biên của vùng.
L = watershed(D);
rgb = label2rgb(L,'jet',[.5 .5 .5]); %đường biên sẽ có màu xám [.5 .5 .5]
figure, imshow(rgb,'InitialMagnification','fit')
title('Watershed transform of D')
1. Phân vùng dựa vào sự tương tự về cường độ
Giải quyết*: làm mờ ảnh (lọc thông thấp) đi trước khi thực hiện hoặc giới hạn lại số
lượng những vùng quan tâm (đặt ngưỡng)
1. Phân vùng dựa vào sự tương tự về cường độ
*Giải quyết 1: làm mờ
Ảnh gốc Ảnh làm mờ Watershed
1. Phân vùng dựa vào sự tương tự về cường độ
Matlab code
I=imread('CT.BMP');
J=watershed(I);
H=fspecial('gaussian',300,1);
K=filter2(H,I); %sau khi đã làm mờ
K=uint8(K);
imshow(I)
improfile
figure;imshow(K)
improfile
Iw=watershed(I);
Kw=watershed(K);
figure;imshow(Iw);
figure;imshow(Kw);
1. Phân vùng dựa vào sự tương tự về cường độ
Đếm số vùng
Làm thế nào để phân vùng ảnh?
Bước 1: Xác định biên (xem các kỹ thuật dò biên trong phần 2 - tăng cường ảnh)
Bước 2: Nối các biên lại với nhau tạo thành các vùng:
1. Kỹ thuật Erosion / Dilation
2. Kỹ thuật Edge Relaxation
1. Phân vùng dựa vào sự tương tự về cường độ
Matlab code
1. Erosion / Dilation
%Đọc ảnh vào
I = imread('cell.tif');
figure, imshow(I), title('Anh goc');
%Lấy biên
[BWs nguong] = edge(I, 'sobel'); %lấy giá trị ngưỡng tự động
heso = .5;
BWs = edge(I,'sobel', nguong*heso); %giảm giátrị ngưỡng tựđộng đi 1/2 để lấy nhiều biên hơn
figure, imshow(BWs), title('Mat na chua bien');
%Làm dày biên lên bằng kỹ thuật “Dilate”
se90 = strel('line', 3, 90);
se0 = strel('line', 3, 0);
BWsdil = imdilate(BWs, [se90 se0]);
figure, imshow(BWsdil), title('Mat na chua bien duoc lam day len');
%Làm đầy các lỗ trống
BWdfill = imfill(BWsdil, 'holes');
figure, imshow(BWdfill);
%Bỏ đi các thành phần sát ở biên
BWnobord = imclearborder(BWdfill, 4);
figure, imshow(BWnobord),
%Làm mượt biên
seD = strel('diamond',1); %seD = strel('square',3);
BWfinal = imerode(BWnobord,seD);
BWfinal = imerode(BWfinal,seD);
figure, imshow(BWfinal),
%Vẽ đường biên (màu trắng) và hiển thị lên ảnh kết quả
BWoutline = bwperim(BWfinal);
Segout = I;
Segout(BWoutline) = 255;
figure, imshow(Segout), title('Te bao duoc xac dinh');
1. Phân vùng dựa vào sự tương tự về cường độ
1. Erosion
Mục đích: lược bỏ bớt đi đường biên của vùng (vùng: màu trắng; nền: màu
đen) vùng đối tượng sẽ bị co lại
Mô tả:
- Ngõ vào: 2 tập dữ liệu: 1 là ảnh cần eroded (X - original image); 1 thành phần
cấu trúc (K - structuring element) là một mảng các giá trị 1 (trắng) tạo thành dạng
hình vuông / hình đĩa / hình dạng bất kỳ (tùy mục đích)
- Phần tử nằm giữa cấu trúc K sẽ trượt lần lượt qua từng pixel trong X (gọi là
input pixel). Input pixel có giá trị là đen nếu có bất kỳ một pixel nào bên dưới
K là đen; Input pixel không đổi nếu tất cả các pixels bên dưới K đều trắng.
1. Erosion
So sánh khi K dạng hình vuông (square) 3x3 và hình thoi (diamond) x1
Matlab code
imerode
1. Phân vùng dựa vào sự tương tự về cường độ
1. Dilation
Mục đích: thêm vào (“bồi đắp”) cho vùng (vùng: màu trắng; nền: màu đen)
vùng đối tượng sẽ lớn lên
Mô tả:
- Ngõ vào: 2 tập dữ liệu: 1 là ảnh cần eroded (X - original image); 1 thành phần
cấu trúc (K - structuring element) là một mảng các giá trị 1 (trắng) tạo thành dạng
hình vuông / hình đĩa / hình dạng bất kỳ (tùy mục đích)
- Phần tử nằm giữa cấu trúc K sẽ trượt lần lượt qua từng pixel trong X (gọi là
input pixel). Input pixel có giá trị là trắng nếu có bất kỳ pixels nào bên dưới K
là trắng; sẽ không đổi nếu tất cả các pixel nào bên dưới K là đen.
K có dạng vuông → tác
dụng làm cho vùng giãn
ra
Matlab code
imdilate
1. Phân vùng dựa vào sự tương tự về cường độ
bwareaopen
Matlab code
imclose
1. Phân vùng dựa vào sự tương tự về cường độ
2. Edge Relaxation
Mục đích: Nối dài các mép để tạo thành vùng kín hoặc bỏ đi các mép giả (sinh
ra do nhiễu…)
Mô tả:
- Ngõ vào: ảnh chứa nhiều mép khác nhau.
- Xử lý: xét đặc tính của từng loại mép dựa vào những mép ở sát xung quanh.
a f
e
b g
c h
Xung quanh 2 đầu mép e có thể tồn tại các mép khác
1. Phân vùng dựa vào sự tương tự về cường độ
2. Edge Relaxation
1. Phân vùng dựa vào sự tương tự về cường độ
2. Edge Relaxation
• Thực hiện 1 lần cho tất cả các mép rời rạc (cracked edge) rồi lặp lại
nhiều lần như vậy.
1. Phân vùng dựa vào sự tương tự về cường độ
2. Edge Relaxation
Làm thế nào để phân vùng ảnh?
Nếu khoảng cách từ điểm màu đang xét đến điểm màu nào (tf1, tf2 hoặc
tf3) nhỏ nhất → điểm màu này thuộc vùng màu đó.
3. Phân vùng ảnh màu
1. Không gian màu HSB / HSL a) Phân vùng màu ra khỏi vùng trắng
đen:
Ảnh siêu âm Doppler, thông thường vùng
phổ đỏ và xanh có giá trị S & L >= 0.28.
Các vùng còn lại (trắng đen, xám chứa
thông tin về cấu trúc) có S & L < 0.28.
Dùng kỹ thuật đặt ngưỡng để loại
Lưu ý:
Bài tập giải được lưu dưới dạng M-file (*.m) +
file FIG (chứa giao diện chương trình). Nếu
cần ghi chú thì ghi ngay trong file .m bằng
cách dùng ký tự %
1) http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/
MORSE/threshold.pdf
2) http://www.labbookpages.co.uk/software/imgProc/otsuThreshol
d.html
3) 3D Segmentation & Visualization of MRI brain images - By
Yuzhu Lu, Liangshou Wu, May. 4, 2005
4) Computer Vision - S. Narasimhan, Spring 2006