Chương 6 gồm có những nội dung chính sau: Tín hiệu hai chiều (ảnh số), biểu diễn ảnh, các kiểu ảnh trong matlab, ảnh được định chỉ số (indexed images), ảnh cường độ (intensity images), ảnh nhị phân (binary images),... Mời các bạn cùng tham khảo.
Trang 1Xử lý tín hiệu nâng cao
-Advanced signal
processing-Chương 6
Xử lý ảnh trong Matlab
Trang 2Tín hiệu hai chiều (ảnh số)
Biểu diễn ảnh
Một ảnh được biểu diễn dưới dạng một hàm f(x,y)
Đối với ảnh số đơn sắc, giá trị f tại (x,y) được gọi
là mức xám
Kết quả của quá trình lấy mẫu và lượng tử hóa là
Kết quả của quá trình lấy mẫu và lượng tử hóa là một ma trận số liệu
Một ảnh có kích thước M x N là một ma trận có M hàng và N cột, mỗi một giá trị trên ma trận gọi là một điểm ảnh (pixel).
Trang 3Biểu diễn ảnh
Một ma trận tọa độ ảnh trong Matlab được biểu diễn
Trang 4Các kiểu ảnh trong Matlab
Ả nh được định chỉ số (Indexed Images)
Ả nh cường độ (Intensity Images)
Ả nh nhị phân (Binary Images)
Ả nh RGB (RGB Images)
Ả nh RGB (RGB Images)
Trang 5Ảnh được định chỉ số (Indexed Images)
Một ảnh chỉ số bao gồm một ma trận dữ liệu X và ma trận bản
đồ màu map Ma trận dữ liệu có thể có kiểu thuộc lớp uint8, uint16 hoặc kiểu double Ma trận bản đồ màu là một mảng
mx3 kiểu double bao gồm các giá trị dấu phẩy động nằm giữa
0 và 1 Mỗi hàng của bản đồ chỉ ra các giá trị mà: red, green
và blue của một màu đơn Một ảnh chỉ số sử dụng ánh xạ trực tiếp giữa giá trị của pixel ảnh tới giá trị trong bản đồ màu Màu sắc của mỗi pixel ảnh được tính toán bằng cách sử dụng giá trị tương ứng của X ánh xạ tới một giá trị chỉ số của map Giá trị 1 chỉ ra hàng đầu tiên, giá trị 2 chỉ ra hàng thứ hai trong bản
đồ màu …
Một bản đồ màu thường được chứa cùng với ảnh chỉ số và
được tự động nạp cùng với ảnh khi sử dụng hàm imread để
đọc ảnh Tuy nhiên, ta không bị giới hạn khi sử dụng bản đồ màu mặc định, ta có thể sử dụng bất kì bản đồ màu nào
Trang 6Ảnh cường độ (Intensity Images)
Một ảnh cường độ là một ma trận dữ liệu ảnh I mà giá trị của
nó đại diện cho cường độ trong một số vùng nào đó của ảnh Matlab chứa một ảnh cường độ như một ma trận đơn, với mỗi phần tử của ma trận tương ứng với một pixel của ảnh Ma
trận có thể thuộc lớp double, uint8 hay uint16 Trong khi ảnh cường độ hiếm khi được lưu với bản đồ màu, Matlab sử dụng bản đồ màu để hiển thị chúng
Những phần tử trong ma trận cường độ đại diện cho các
cường độ khác nhau hoặc độ xám Những điểm có cường độ bằng 0 thường được đại diện bằng màu đen và cường độ
1,255 hoặc 65535 thường đại diện cho cường độ cao nhất
hay màu trắng
Trang 7Ảnh nhị phân (Binary Images)
Trong một ảnh nhị phân, mỗi pixel chỉ có thể chứa một trong hai giá trị nhị phân 0 hoặc 1 Hai giá trị này tương ứng với bật hoặc tắt (on hoặc off) Một ảnh nhị
phân được lưu trữ như một mảng logic của 0
và 1.
Trang 8Ảnh RGB (RGB Images)
Một ảnh RGB - thường được gọi là true-color, được lưu trữ trong Matlab dưới dạng một mảng dữ liệu có kích thước 3 chiều mxnx3 định nghĩa các giá trị màu red, green và blue cho mỗi pixel riêng biệt Ảnh RGB không sử dụng palette Màu của mỗi pixel được quyết định bởi sự kết hợp giữa các giá trị R, G, B (Red, Green, Blue) được lưu trữ trong một mặt phẳng màu tại vị trí của pixel Định dạng file đồ hoạ lưu trữ ảnh RGB giống như một
ả nh 24 bits trong đó R, G, B chiếm tương ứng 8 bit một Điều này cho
phép nhận được 16 triệu màu khác nhau
Một mảng RGB có thể thuộc lớp double, uint8 hoặc uint16 Trong một
mảng RGB thuộc lớp double, mỗi thành phần màu có giá trị giữa 0 và 1 Một pixel mà thành phần màu của nó là (0, 0, 0) được hiển thị với màu đen
và một pixel mà thành phần màu là (1, 1, 1 ) được hiển thị với màu trắng
Ba thành phần màu của mỗi pixel được lưu trữ cùng với chiều thứ 3 của mảng dữ liệu Chẳng hạn, giá trị màu R, G, B của pixel (10, 5) được lưu trữ trong RGB(10, 5, 1), RGB(10, 5, 2) và RGB(10, 5, 3) tương ứng
Để tính toán màu sắc của pixel tại hàng 2 và cột 3 chẳng hạn, ta nhìn vào
bộ ba giá trị được lưu trữ trong (2, 3, 1:3) Giả sử (2, 3, 1) chứa giá trị
0.5176; (2, 3, 2) chứa giá trị 0.1608 và (2, 3, 3) chứa giá trị 0.0627 thì màu sắc của pixel tại (2, 3) sẽ là (0.5176, 0.1608, 0.0627).
Trang 9Đọc và hiển thị 1 ảnh
Xóa các biến và các cửa sổ ảnh
clear, close all
Trang 10Có thể xem các thông tin về biến trong workspace bằng lệnh whos
Trang 11Thực hiện cân bằng Histogram trên ảnh
Ta thấy, pout.tif là một hình ảnh có độ tương phản hơi thấp
Để xem sự phân bố cường độ trong pout.tif, ta có thể tạo ra một lược đồ histogram bằng cách gọi hàm imhist
Trước khi gọi hàm imhist, sử dụng lệnh figure để lược đồ histogram không ghi đè lên màn hình hiển thị của ảnh I trong cửa sổ hiện tại.
1600
figure, imhist(I)
0 200 400 600 800 1000 1200 1400
Phạm vi cường độ khá hẹp
Nó không che hết phạm
tiềm năng của [0, 255], và
thiếu các giá trị cao và thấp
sẽ cho kết quả tương phản
tốt.
Trang 12Thực hiện cân bằng Histogram trên ảnh
Hộp công cụ cung cấp nhiều cách để cải thiện
độ tương phản trong một hình ảnh
Hàm histeq để dàn trải các giá trị cường độ
trên toàn bộ phạm vi ảnh, gọi là quá trình cân bằng histogram
I2 = histeq(I);
Xem thêm hàm histeq, imadjust, adapthisteq
Trang 13Thực hiện cân bằng Histogram trên ảnh
Hiển thị ảnh sau khi đã được cân bằng histogram
figure, imshow(I2)
Xem lược đồ histogram của ảnh I2
figure, imhist(I2)
0 50 100 150 200 250 0
200 400 600 800 1000
1200
1400
1600
Trang 14Thực hiện cân bằng Histogram trên ảnh
Ảnh trước và sau khi được cân bằng histogram
0 200 400 600 800 1000 1200 1400 1600
0 50 100 150 200 250 0
200 400 600 800 1000
1200
1400
1600
Trang 15Lưu một ảnh từ ma trận ra một file
Dùng lệnh imwrite:
imwrite (I2, 'pout2.png')
Trang 16Xem các thông tin của ảnh
Dùng lệnh imfinfo
imfinfo('pout2.png')
Trang 18Ví dụ 2
Ướ c lượng giá trị của điểm ảnh Background:
Ví dụ gọi hàm imopen để thực hiện các thao tác mở về hình thái học Chú ý lời gọi đến hàm strel, tạo ra một phần tử cấu trúc hình đĩa với bán kính 15 Để loại bỏ các hạt gạo từ hình ảnh, các phần tử cấu trúc phải đủ lớn để
nó không thể đặt vừa toàn bộ bên trong một hạt gạo
background = imopen(I,strel('disk',15));
Để xem ảnh background ước lượng, gõ lệnh:
imview(background)
Trang 19Ví dụ 2
Xem xấp xỉ Background như một bề mặt
Sử dụng lệnh surf để tạo ra một màn hình hiển thị bề mặt của xấp xỉ nền Lệnh surf tạo bề mặt màu tham số cho phép bạn xem các hàm toán học trong một vùng chữ nhật Hàm surf yêu cầu dữ liệu lớp
double, do đó, trước tiên bạn cần phải chuyển đổi nền bằng lệnh
double
figure, surf(double(background(1:8:end,1:8:end))),zlim([0 255]); set(gca,'ydir','reverse');
0 50 100 150 200 250
Trang 20Vì phép trừ, giống như nhiều phép toán trong MATLAB, chỉ
hỗ cho dữ liệu lớp double, bạn phải sử dụng hàm
hỗ cho dữ liệu lớp double, bạn phải sử dụng hàm
Hiển thị hình ảnh với nền đồng nhất hơn
imview(I2)
Trang 21Ví dụ 2
Điều chỉnh độ tương phản trong ảnh đã xử lý
Sau phép trừ, hình ảnh có một nền thống nhất nhưng ảnh hơi tối quá.
Sử dụng imadjust để điều chỉnh độ tương phản của hình ảnh.
I3 = imadjust(I2);
hòa 1% dữ liệu ở cả hai cường độ thấp và cao của I2 và bằng cách trải dài các giá trị cường độ để điền đầy phạm vi động uint8.
dài các giá trị cường độ để điền đầy phạm vi động uint8.
Hiển thị ảnh I3 đã được điều chỉnh
imview(I3);
Trang 22Ví dụ 2
Tạo ra một Phiên bản nhị phân của ảnh
Tạo một phiên bản nhị của hình ảnh bằng cách sử dụng ngưỡng
• Hàm Graythresh tự động tính ra một ngưỡng thích hợp sử dụng để chuyển đổi ảnh cường độ sang ảnh nhị phân
• Hàm Im2bw thực việc chuyển đổi
level = graythresh(I3);
bw = im2bw(I3,level);
imview(bw)
Trang 23Ví dụ 2
Tạo ra một Phiên bản nhị phân của ảnh
ả nh nhị phân bw tạo ra bởi lệnh im2bw thuộc lớp
logical, xem bằng lệnh whos
whos
Trang 24Ví dụ 2
Xác định số lượng đối tượng trong Image
Sau khi chuyển đổi ảnh sang một ảnh nhị phân, có thể sử dụng hàm
và trả về số lượng các thành phần mà nó tìm thấy trong ảnh tại tham số
đầ u ra, numObjects
[labeled,numObjects] = bwlabel(bw,4)
numObjects =
101
Trang 25Ví dụ 2
Xác định số lượng đối tượng trong Image
Độ chính xác của kết quả phụ thuộc vào một số yếu tố, bao gồm:
• Kích thước của các đối tượng
• Có hay không có đối tượng được chạm vào (trong
• Có hay không có đối tượng được chạm vào (trong trường hợp chúng được gán nhãn là một trong những
Trang 26imview(labeled)
Trang 27Ví dụ 2
Xem xét ma trận nhãn
Trang 28Ví dụ 2
Hiển thị Ma trận Nhãn như một ảnh chỉ số PseudoColor
Một cách tốt để xem một ma trận nhãn là để hiển thị nó như một ảnh chỉ số PseudoColor
Trong hình ảnh PseudoColor, con số xác định một đối tượng trong bản
đồ ma trận nhãn với một màu sắc khác nhau trong ma trận bản đồ màu đượ c liên kết Các màu trong ảnh làm các đối tượng dễ phân biệt
đượ c
đượ c
Để xem một ma trận nhãn theo cách này, sử dụng hàm label2rgb
Sử dụng hàm này, bạn có thể chỉ định bản đồ màu, màu nền, và cách các đối tượng trong bản đồ ma trận nhãn có màu nào bản đồ màu.
pseudo_color = label2rgb(labeled, @spring, 'c', 'shuffle'); imview(pseudo_color);
Trang 29Ví dụ 2
Hiển thị Ma trận Nhãn như một ảnh chỉ số PseudoColor
pseudo_color = label2rgb(labeled, @spring, 'c', 'shuffle'); imview(pseudo_color);
Trang 30Phép lọc tuyến tính
Trong Matlab, sử dụng hàm fspecial để tạo mặt nạ lọc
>> H= fspecial('type',parameter)
'average' averaging filter
'average' averaging filter
'disk' circular averaging filter
'gaussian' Gaussian lowpass filter
'motion' motion filter
'prewitt' Prewitt horizontal edge-emphasizing filter
'sobel' Sobel horizontal edge-emphasizing filter
'unsharp' unsharp contrast enhancement filter
Trang 321 1
1
1 1
1
9 1
Trang 34Phép lọc tuyến tính
Mặt nạ motion
H= fspecial('motion',len,theta)
Giá trị mặc định len=9, theta=0
Đượ c sử dụng để làm nhòe ảnh có hướng
Trang 351 1
0
1 2
1
Trang 36Phép lọc tuyến tính
Mặt nạ unsharp
H= fspecial('unsharp',alpha)
Tăng cường độ nét và tương phản
Kích thước 3x3, tham số alpha mặc định = 0.2
figure,imshow(I2)
Trang 37Phép lọc tuyến tính
Trang 38Lọc tuyến tính
Mặt nạ Lapalacian
fspecial('laplacian', alpha)
Tăng độ sắc nét cho ảnh
Trang 40Loại bỏ viền đen
Trang 41Để loại bỏ viền đen
I3 = imfilter(I,H,'replicate'); imshow(I2);figure,imshow(I3);
Trang 42Phép lọc phi tuyến
Mục đích giảm nhiễu xung
Các loại bộ lọc phi tuyến
Trang 43Lọc phi tuyến
Bộ lọc hạng: là phương pháp lọc trong đó
mức xám tại một điểm được tính dựa trên sự xếp hạng các điểm ảnh lân cận
Hàm ordfilt2 cung cấp cho ta bộ lọc dạng này
g= ordfilt2(f, order, domain)
Ví dụ
g=ordfilt2(f,1,ones(m,n));
g=ordfilt2(f,m*n,ones(m,n));
Trang 45Khôi phục ảnh
Khôi phục ảnh tập trung vào việc loại bỏ hay giảm thiểu sự biến dạng xảy ra trong quá trình thu nhận ảnh
Sự biến dạng ảnh có thể bao gồm :
Nhiễu-là những sai khác trong giá trị của pixel,
Ả nh hưởng quang học : sự mở do việc chuyển
độ ng của camera
Ta có dạng tổng quát của ảnh bị biến dạng:
g(x,y) = f(x,y)*h(x,y) + n(x,y)
Trang 46Khôi phục ảnh
Nhiễu muối tiêu
I2= imnoise(I1,'salt & pepper')
Trang 47Khôi phục ảnh
Nhiễu gaussian
t = imnoise(image,’gaussian’)
Trang 49Tì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ó sự thay đổi qua mức 0
Trang 51Tách biên ảnh
Kết quả