Mục lục
1
I. Phát biểu bài toán
Hiện nay phần lớn lượng thông tin con người thu vào là dưới dạng hình
ảnh.Thông tin dưới dạng hình ảnh là thông tin trực quan nên con người dễ dàng
tiếp nhận nó.Với sự ra đời của nhiều máy móc kỹ thuật hiện đại như máy ảnh
số,máy quay số,các máy thu hình,máy vi tính … thì lượng thông tin con người
thu được càng nhiều.Con người không chỉ muốn tiếp thu thông tin một cách thụ
động mà phải biết xử lý nó,làm cho nó hữu ích hơn.Do đó con người đã tiến
hành nghiên cứu các phương pháp xử lý trên thông tin trực quan này để chúng
ta có thể tiếp nhận tối đa lượng thông tin trực quan này .Việc xử lý ảnh số đã ra
đời với nhiều hướng phát triển khác nhau như nén ảnh,nhận dạng,giấu tin …
Trong xử lý ảnh ,sau quá trình thu nhận ảnh là quá trình phân tích ảnh,mà
thực chất bao gồm nhiều công đoạn nhỏ như : Tăng cường ảnh,phát hiện các
đặc tính như biên,phân vùng ảnh … Do những nguyên nhân như chất lượng
máy thu nhận ảnh ,do nguồn sáng hay nhiễu,ảnh có thể bị suy yếu đi các đặc
trưng mà ta quan tâm.Do vậy cần tăng cường và khôi phục ảnh để làm nổi bật
các đặc trưng của ảnh mà ta quan tâm.Tăng cường ảnh bao gồm nhiều phương
pháp và xử lý điểm ảnh là một trong những cách được khá nhiều người sử
dụng.Với các phương pháp như thay đổi độ tương phản,tạo ảnh âm bản,phân
ngưỡng …đã tạo ra hiệu quả có giá trị trong thực tế.
Với đề bài “ Tìm hiểu các phương pháp xử lý điểm ảnh như thay đổi độ
tương phản ,tạo ảnh âm bản và phân ngưỡng ảnh.Thử nghiệm trên ảnh
màu 24 bít.” Em đã tập trung làm rõ và cài đặt các phương pháp trên đối với
ảnh màu 24 bít.
Trong quá trình làm bài tập không thể tránh được những sai sốt.Em rất mong
thầy xem xét và góp ý để cho em có nhiều kinh nghiệm hơn trong môn xử lý
ảnh.
Em xin chân thành cảm ơn!
2
II. Hướng giải quyết
Phép biến đổi u(x,y) = f(v(x,y)), trong đó:
v(x,y): mức xám điểm ảnh x,y trên ảnh gốc
u(x,y): mức xám điểm ảnh x,y trên ảnh kết quả
f : được gọi là toán tử điểm.
Kỹ thuật biến đổi dùng toán tử điểm tương đối đơn giản nhưng đem lại
hiệu quả khá cao (trong một số ứng dụng).
Ảnh có thể được biểu diễn dưới dạng tín hiệu tương tự hoặc tín hiệu số.
Trong phạm vi bài tập em chỉ đề cập tới ảnh số 24bit. Trong biểu diễn ảnh số
của ảnh đa mức xám, một ảnh được biểu diễn dưới dạng một ma trận hai chiều.
Mỗi phần tử của ma trận biểu diễn cho một mức xám hay cường độ của ảnh tại
vị trí đó và được gọi là điểm ảnh(pixel).
Khác với ảnh 8 bit, trong ma trận của ảnh 24 bit, mỗi phần tử biểu diễn cho
3 màu riêng rẽ: red, green, blue . Tại mỗi điểm ảnh cần 24 bit và 24 bit này
được chia thành 3 khoảng 8 bit. Mỗi khoảng này biểu diễn cho cường độ sáng
của một trong các màu chính. Đối với ảnh đa mức xám, 3 byte này có cùng một
giá trị.Do đó hướng giải quyết đối với ảnh màu 24bit là thực hiện theo từng
thành phần màu riêng rẽ R,G,B sau đó tổng hợp lại.
III. Thuật toán
1. Thay đổi độ tương phản(Contrast stretching)
Độ tương phản thể hiện sự thay đổi cường độ sáng của đối tượng so với
nền,hay nói cách khác độ tương phản chính là độ nổi của điểm ảnh hay vùng
ảnh so với nền.
Thực tế chỉ ra rằng, 2 đối tượng có cùng độ sáng nhưng đặt trên 2 nền khác
nhau thì cho cảm nhận khác nhau.
Ảnh có độ tương phản thấp có thể do điều kiện sáng không đủ hay không
đều, hoặc do tính không tuyến tính hay biến động nhỏ của bộ phận nhận ảnh.
3
Để điều chỉnh độ tương phản của ảnh, ta có thể điều chỉnh lại biên độ của
ảnh trên toàn dải hay trên dải có giới hạn bằng cách biến đổi biên độ đầu vào.
Có thể sử dụng phép biến đổi tuyến tính hay phi tuyến (hàm biến đổi là hàm
tuyến tính hay hàm mũ, hàm logarit).
Công thức :
( )
<
≤≤+
−
−
−
<
=
),(,
,),(,
),(
.
,),(,
),(
max
minminmax
min
yxfaL
ayxfaL
aa
ayxf
LL
ayxfL
yxg
high
highl ow
lowhigh
l ow
low
Với những ảnh mà các mức xám chênh lệch nhau không nhiều (độ tương
phản thấp) thì ta cần dãn ra để thấy rõ sự khác biệt. Trong phương pháp này ta
sẽ làm tối những vùng có mức xám nhỏ hơn a
low
, sáng hẳn vùng có mức xám
lớn hơn a
max
, khi đó ta sẽ trải được khoảng mức xám [ a
low
, a
high
] trên toàn dải
[L
min
, L
max
].
2. Tạo ảnh âm bản
Công thức:
g(x,y) = L
max
- f(x,y)
Với: L
min
≤ f(x,y) ≤ L
max
3. Phân ngưỡng ảnh
Công thức:
<
<
=
),(,
,),(,
),(
max
min
yxfL
yxfL
yxg
θ
θ
4
Ảnh đầu ra chỉ có 2 mức: thấp và cao.
Ngưỡng θ trong kỹ thuật tách ngưỡng thường được cho bởi người sử
dụng. Kỹ thuật tách ngưỡng tự động nhằm tìm ra ngưỡng θ một cách tự
động dựa vào histogram theo nguyên lý trong vật lý là vật thể tách làm 2
phần nếu tổng độ lệnh trong từng phần là tối thiểu.
Giả sử, ta có ảnh I ~ kích thước m × n
G ~ là số mức xám lớn nhất của ảnh
t(g) ~ số điểm ảnh có mức xám ≤ g
h(g) ~ số điểm ảnh có mức xám =g
m(g) =
∑
=
g
i
hii
0
*
/ t(g) ~ mômen quán tính TB có mức xám ≤ g
IV. Kỹ thuật cài đặt
Tạo một lớp thuật toán chứa tất cả các thuật toán trong bài
class Algorithm
{
/// <summary>
///Thay doi do tuong phan
5
/// </summary>
/// <param name="value_pixel"> gia tri diem
anh</param>
/// <param name="a_low">can duoi gia tri diem anh
can thay doi do tuong phan </param>
/// <param name="a_high">can tren gia tri diem
anh can thay doi do tuong phan</param>
/// <param name="L_min">can duoi can dat
duoc</param>
/// <param name="L_max">can tren can dat
duoc</param>
/// <returns></returns>
public static int ContrastStretching(int
value_pixel,int a_low,int a_high,int L_min,int
L_max)
{
int temp_pixel;
if (value_pixel <= a_low)
{
temp_pixel = L_min;
}
else if (a_high <= value_pixel)
{
temp_pixel = L_max;
}
else
{
temp_pixel = Convert.ToInt32((L_max -
L_min) *(value_pixel - a_low) / (a_high
- a_low) + L_min);
}
return temp_pixel;
}
/// <summary>
/// Tao anh am ban
/// </summary>
6
/// <param name="value_pixel">gia tri diem
anh</param>
/// <param name="L_max">gia tri diem anh lon
nhat</param>
/// <returns></returns>
public static int Negative(int value_pixel,int
L_max)
{
return (L_max - value_pixel);
}
/// <summary>
/// Phan nguong anh
/// </summary>
/// <param name="value_pixel">gia tri diem
anh</param>
/// <param name="Threshold">Nguong dung de
phan</param>
/// <returns></returns>
public static int Img_Threshold(int
value_pixel,int Threshold)
{
if (value_pixel<Threshold)
{
return 0;
}
else
{
return 255;
}
}
/// <summary>
/// Phuong pháp tự động tìm ngưỡng thích hợp
/// </summary>
7
/// <param name="bmp">mảng điểm ảnh</param>
/// <param name="amax">giá trị mức xám lớn
nhất</param>
/// <param name="amin">giá trị mức xám nhỏ
nhất</param>
/// <param name="w">chiều dài</param>
/// <param name="h">chiều cao</param>
/// <returns>giá trị ngưỡng</returns>
public static int AutoThreshold(int[,] bmp, int
amax, int amin, int w, int h)
{
int[] hg = new int[256];
int[] tg = new int[256];
double[] mg = new double[256];
double[] fg = new double[256];
for (int g = amin; g <= amax; g++)
{
hg[g] = 0;
}
//Tim a_max,a_min cho tung thanh phan mau
RGB
for (int i = 0; i < w; i++)
for (int j = 0; j < h; j++)
{
for (int g = amin; g <= amax; g++)
{
if (bmp[i, j] == g)
{
//so diem anh co muc xam g
hg[g]++;
tg[g]++;
}
if (bmp[i, j] < g)
{
//so diem anh co muc xam < g
tg[g]++;
}
}
8
}
//tinh momen quan tinh trung binh co muc
xam nho hon g
for (int g = amin; g <= amax; g++)
{
int temp = 0;
for (int i = 0; i <= g; i++)
{
temp += i * hg[i];
}
mg[g] = Math.Round(temp / (float)tg[g], 3);
}
//tinh ham nguong
for (int g = amin; g < amax; g++)
{
fg[g] = Math.Round((tg[g] / (float)(w * h
- tg[g])) * ((mg[g] - mg[amax]) *
(mg[g] - mg[amax])), 3);
}
int g1 = 0;
//Tim fg max
double fgmax = 0;
for (int g = amin; g < amax; g++)
{
if (fg[g] > fgmax)
{
fgmax = fg[g];
g1 = g;
}
}
return g1;
}
}
V. Kết quả
Tăng độ tương phản:
9
Âm bản :
Phân ngưỡng :
10
11