Xử lý ảnh
Trang 1Chơng 4 Làm nổi ảnh
4.1 Chỉ dẫn
giải của ảnh cho con ngời cảm nhận Những vấn đề đợc đề cập đến trong phần này:
Chúng tôi cũng cung cấp cho bạn các chơng trình C và kết quả chạy các chơng trình này trên một số ảnh để kiểm tra Nh các chơng khác, một số bài tập đợc cho kèm theo Các bài tập này giúp cho bạn hiểu rõ vấn đề và có sự đánh giá tốt hơn ứng dụng của lĩnh vực này
4.2 Mô hình phản xạ độ sáng
Một bức ảnh đợc tạo nên qua phép chiếu của một cảnh trong không gian ba chiều lên
phẳng này đặc tính của ảnh và đợc coi rằng là một mô hình phụ thuộc vào hai yếu tố Yếu
∞
<
≤
∞
<
≤
) , ( 0
) , ( 0
y x i
y x f
1 ) , (
rằng ở đó ánh sáng phản xạ toàn phần Nếu một bề mặt có độ phản xạ bằng 0, thì hàm c-ờng độ sáng của ảnh cho bề mặt đó cũng bằng 0 Nếu một bề mặt có độ phản xạ bằng 1, thì
f(x,y) sẽ bằng với độ sáng nhận đợc bởi bề mặt này.
Theo định nghĩa:
Trang 2
) , (
) , ( ) , (
y x i
y x f y x
f ( x , y ) = r ( x , y ) i ( x , y ) (4.4)
phơng pháp dùng để tăng cờng chất lợng của ảnh là làm giảm sự tác động của yếu tố độ sáng và tăng cờng các chi tiết của ảnh Nó đợc thực hiện bằng cách chia ảnh thành hai khối khi đi qua bộ nhấn tần số cao Các bớc xử lý tiếp đợc mô tả trong một loại bộ lọc đặc
4.3 Lọc đồng hình
động của độ chói Nó đợc thực hiện bằng cách đầu tiên chia tín hiệu ảnh thành hai thành
đặc tính nh trong hình 4.1
Hình 4.1 Biểu diễn dạng bộ lọc đồng hình.
Lấy đối lôgarit kết quả cho ta kết quả cuối cùng Toàn bộ quá trình này đợc mô tả ở hình 4.2 hoặc theo các biểu thức sau:
) , (
* )) , ( ln(
) ,
) , (
) ,
Thuật toán này sẽ làm giảm ảnh hởng của những tín hiệu chói không đồng đều trong
nghiệm Đặc tuyến trong hình 4.1 có thể đợc mô tả, cho ví dụ, bằng hàm Butterworth, cho trong trờng hợp này theo biểu thức:
Cho
H(ω1,
D(ω1,ω2)
D0
γL
γH
0
2 2
2 1 2
Trang 3
L H
L H
L H
D D
D
γ γ
γ γ ω
ω
γ γ ω ω ω
−
+
− +
−
=
) (
1 )
, (
) , ( )
, (
2 0
2 2 1
2 2 1 2
1
Hình 4.2 Lọc đồng hình.
Bảng 4.1 Các hệ số của bộ lọc 5 ì 5 đợc dùng theo kiểu lọc đồng hình
Dùng chơng trình (2.1) trong chơng 2, chúng ta có thể thiết kế bộ lọc FIR có đặc tuyến
cho ở bảng 4.1 Đáp ứng tần số đợc cho ở hình 4.3
Chơng trình lọc ảnh dùng bộ lọc FIR đợc cho ở trong chơng 3, chơng trình 3.2, có thể
vào bộ đệm, thì bộ đệm chuyển ảnh trong hình 3.1 phải có kiểu "float" thay cho kiểu
"unsigned char" Kết quả của chơng trình đợc chứa vào các biến con trỏ float thay thế cho các biến giá trị nguyên
Trớc khi lấy logarit, tốt nhất là nên chia các mức xám của ảnh đầu vào nằm trong khoảng giữa 0.0000001 đến 10 Điều này sẽ hạn chế đầu vào với phần chia của hệ số logarit, việc đó sẽ qui định sự phân ly giữa các giá trị điểm, ngaọi trừ giá trị không, giá trị này sẽ là −∞ trong hệ số logarit
Bài tập 4.1 Thay đổi chơng trình 3.2 để đa ra bộ lọc đồng hình
Chúng ta sẽ kiểm tra khái niệm lọc đồng hình Hình 4.5 đa ra một ảnh sẽ đợc sử dụng
để kiểm tra Hình 4.6 trình bày một ảnh sau khi áp dụng lọc đồng hình với bộ lọc có hệ số cho trong bảng 4.1 Bạn chú ý rằng nhiều đặc điểm trong ảnh bây giờ trở nên rõ ràng hơn
phản chiếu và bóng tối
Bài tập 4.2
1 Thiết kế bộ lọc 7 ì 7 dùng xấp xỉ hàm Butterword cho bởi biểu thức (4.8) với γH = 1.0, γL= 0.25 và D0 = 0.8 π và γH = 1.0, γL= 0.25 và D0 = 0.6 π Thiết kế bộ lọc FIR
7 ì 7 dùng xấp xỉ hàm bộ lọc thông cao Butterword đợc cho trong ví dụ 2.6 trong chơng 2
2 Dùng bộ lọc có các hệ số cho trong bảng 4.1 và thiết kế để lọc ảnh cho trên đĩa với file có tên là "TESH.IMG"
3 Bây giờ lọc ảnh "TESH IMG" với bộ lọc thông cao có cùng đặc tuyến
4 Lặp lại phần 2 và 3 trên ảnh "PISTON.IMG" có sẵn trên ảnh đi kèm
ảnh đ ã lọc
Trang 45 Giải thích các kết quả khác nhau thu đợc từ bài tập này.
Hình 4.3 ảnh 3-D thiết kế bộ lọc 5 ì 5 với D0 = 0.8π, γL= 0.5
Hệ số đợc cho trong bảng 4.1
Hình 4.4 Đồ thị ln(x).
Trang 5Hình 4.5 ảnh dùng kiểm tra lọc đồng hình.
Hình 4.6 ảnh đ lọc đồng hình.ã
Trang 64.4 Lọc pha tơng phản
qua bộ lọc thông toàn bộ với các đặc tuyến pha mô tả ở hình 4.8
Hình 4.7 Sơ đồ khối của lọc pha tơng phản.
Hình 4.8 Đặc tuyến pha và biên độ của PCF.
Lọc pha tơng phản (PCF) đợc dùng trong lọc không gian để hoàn trả lại các chi tiết có thể nhìn thấy đợc với gradient pha Phổ pha của ảnh mang theo nhiều tin tức về ảnh hơn
là biên độ phổ Chúng ta sẽ làm rõ điều này trong chơng 7 Có lẽ sẽ là hợp lý hơn nếu chúng ta xử lý trực tiếp góc pha của ảnh để làm nổi ảnh hơn là xử lý biên độ ảnh Từ sơ đồ khối hình 4.7 ta có thể viết :
) , ( ) , ( ) , ( ) ,
Lấy biến đổi Fourier cả hai vế của (4.9) ta có :
G ( , ω ω1 2) = I ( , ω ω1 2) − H ( , ω ω1 2) ( , I ω ω1 2)
hoặc G
ω ω
ω ω11 22 = − 1 ω ω1 2 (4.10) Khi H(ω1 ,ω2 ) = 1 với D(ω1 ,ω2 ) < ωc và H(ω1 ,ω2 ) = -1 với D(ω1 ,ω2 ) ≥ ωc thì
H(ω1 ,ω 2)
+
−
ωc
−π
D(ω1 ,ω 2) φ(ω1 ,ω 2)
1
D(ω1 ,ω2)
H (ω1 ,ω 2)
Trang 7G
I
ω ω
ω ω11 22 = 0 với D(ω1 ,ω2 ) < ωc (4.11)
I
ω ω
ω ω11 22 = 2 với D(ω1 ,ω2 ) ≥ ωc (4.12) thì đây là bộ lọc thông cao (HPF) đối xứng vòng tròn, với một sự với chuyển tiếp đột ngột
từ giải thông sang dải chắn
Hình 4.9 (a) Bề mặt của Pít tông; (b) Lọc bằng bộ lọc PCF với điểm ωc = 1 25
4.5 Thay đổi lợc đồ mức xám
Lợc đồ mức xám (Histogram) trong một ảnh đợc định nghĩa bởi
n
( ) = ( ) (4.13)
ảnh
Trang 8Sự phân bố p(i) hoặc n(i) có thể cung cấp thông tin về dáng điệu của ảnh Một ảnh có
phân bố mức xám giống nh hình 4.10a thì có sắc màu tối, một ảnh phân bố mức xám nh hình 4.10b thì có sắc màu sáng Vì lý do này, ta có thể làm nổi ảnh bằng cách thay đổi
4.5.1 Xử lý tơng phản
Việc mở rộng mức xám tuyến tính có thể thực hiện bằng cách ánh xạ mức xám của ảnh gốc qua hàm ánh xạ tuyến tính chỉ trên hình 4.11 Đó là:
255
min max
min
r r
r r s
−
−
mức xám kéo dài trong khoảng giữa 0 và 255 Điều này có thể đa đến một vài cải thiện đối với ảnh, và đợc sử dụng nh công đoạn cuối cùng trong tất cả chơng trình lọc đợc cung cấp trong quyển sách này
Hình 4.10 (a) Lợc đồ mức xám của một ảnh có sắc màu tối;
(b) Lợc đồ mức xám của một ảnh có sắc màu sáng
Hình 4.11 Thang chia mức xám tuyến tính.
4.5.2 San bằng lợc đồ mức xám
Sự biến đổi biểu đồ phân bố các mức xám có thể đạt đợc một cách gần đúng bằng cách
mức xám trên ảnh biến đổi theo công thức sau:
)
(r
T
s = (4.15) Biến đổi ngợc đợc cho bởi
r
rmax
rmin
0 255 s
n(i)
i 255 0
a
n(i)
i 255 0
b
Trang 9) (
1 s T
r = − (4.16)
có thể viết:
) (
1 )
( )
(
s T r r
s
ds
dr r p s p
−
=
Chúng ta giả thiết rằng, tại một thời điểm, ảnh gốc và ảnh qua ánh xạ là các hàm liên
∫
=
= T r r pr d s
0
) ( )
( ω ω (4.18)
function - CDF) Từ công thức (4.18) chúng ta có thể viết:
)
(r
p dr
ds
r
= (4.19) Thay thế công thức (4.19) vào (4.17) chúng ta có
0 1 ) (
1 ) ( )
r p r p s p
r r
Vì vậy, phép biến đổi cho bởi công thức (4.18) cho ảnh mức xám có phổ đồng đều Biến
đổi trên có thể đợc viết dới dạng tổng quát hoá nh sau:
∑
=
= k
j
s
0
) ( (4.21)
Hoặc, chúng ta muốn ánh xạ ảnh mức xám nằm giữa 0 và 255, chúng ta có thể thay đổi
k
255
0 255
0
s s
s s
−
−
Chú ý rằng vì công thức (4.21) là một xấp xỉ của công thức (4.18) bằng cách cho rằng
ảnh ánh xạ có thể có lợc đồ mức xám không thực sự đồng đều Một nhân tố khác cũng không đợc quan tâm trong quá trình biến đổi, đó là với một số ảnh mà các mức xám không phủ kýn các miền thì CDF sẽ giữ lại hằng số ở những miền không đợc phủ kýn đó Những nhân tố này sẽ cho kết quả trong ảnh ánh xạ mà ở đó lợc đồ mức xám là xấp xỉ gần nhất với lợc đồ mức xám đồng đều đợc rút ra từ ảnh gốc
Chơng trình 4.1 cho dới đây dùng cho việc san bằng lợc đồ mức xám
Chơng trình 4.1 "UNI_HIST.C"
Trang 10/* PROGRAM 4.1 “UNI_HIST.C” Histogram equalization */
/* Histogram equalization */
#define MAX 16384
#include <stdio.h>
#include <conio.h>
#include <io.h>
#include <math.h>
#include <ctype.h>
#include <stdlib.h>
void main()
{
int image_length,image_width,i,j,ch,true_length;
unsigned long int histo[256],s[256];
char file_name[14];
unsigned char buff[MAX];
int k,n,ind;
double nsq;
float range;
FILE *fptr,*fptr2;
clrscr();
printf("Enter file name of image >");
scanf("%s",file_name);
fptr=fopen(file_name,"rb");
if(fptr==NULL)
{
printf("%s does not exist.",file_name);
exit(1);
}
printf("Enter file name for storing mapped image >");
scanf("%s",file_name);
gotoxy(1,3);
ind=access(file_name,0);
while(!ind)
{
gotoxy(1,3);
printf("File exists Wish to overwrite? (y or n) >");
while(((ch=tolower(getch()))!='y')&&(ch!='n'));
putch(ch);
switch(ch)
{
case 'y':
ind=1;
break;
case 'n':
gotoxy(1,3);
gotoxy(1,2);
gotoxy(1,2);
printf("Enter file name >");
scanf("%s",file_name);
Trang 11}
}
fptr2=fopen(file_name,"wb");
nsq=(double)filelength(fileno(fptr));
printf("\nIs this a square image ? (y or n) ");
while(((ch=tolower(getch()))!='y')&&(ch!='n'));
putch(ch);
switch(ch)
{
case 'y':
image_length=image_width=sqrt(nsq);
break;
case 'n':
printf("Enter image width > ");
scanf("%d",&image_width);
image_length=(int)(nsq/image_width);
}
printf("\n image size= %d x %d",image_length,image_width);
true_length=0.95*image_length;
/* Generate Histogram.*/
for(i=0;i<256;i++)
histo[i]=0;
for(i=0;j<true_length;i++)
for(j=0;j<image_width;j++)
histo[getc(fptr)]++;
/* Generate CDF */
s[0]=histo[0];
for(i=1;i<256;i++)
s[i]=s[i-1]+histo[i];
/* scaling*/
range=(float)(s[255]-s[0]);
for(i=1; i<256; i++)
s[i]=(int)((float)(s[i]-s[0]))*255.0/range;
/* Mapping into a uniform histogram.*/
rewind(fptr);
k=0 ;
for(i=0; i<image_length; i++)
for(j=0; j<image_width; j++)
{
ch=s[getc(fptr)];
buff[k]=(unsigned char)ch;
k++;
if((k==MAX)||(ch==EOF))
{
for(n=0;n<k;n++)
putc((int)buff[n],fptr2);
k=0;
}
}
fclose(fptr);
fclose(fptr2);
printf("\n\nDONE.");
}
Trang 12Để kiểm tra việc san bằng lợc đồ mức xám chúng ta xem xét ảnh trên hình 4.12a Đây
độ sáng của nền ảnh sau khi san bằng mức xám đợc cho trên hình 4.12b Dễ dàng nhận thấy đợc sự thay đổi so với ảnh gốc ảnh cung cấp cho bạn thử nghiệm đợc cung cấp sẵn trên đĩa kèm theo với tên "ISLAM.IMG"
Hình 4.12 (a) ảnh gốc dùng cho san bằng lợc đồ mức xám.
Hình 4.12 (b) ảnh sau khi san bằng lợc đồ mức xám.
Trang 134.5.3 Thay đổi lợc đồ mức xám
Kỹ thuật san bằng lợc đồ mức xám đa ra một phơng pháp trong đó có thể nâng cao chất lợng ảnh qua việc làm bình đẳng tầm quan trọng giữa các mức xám Tuy nhiên, có thể trong một vài ứng dụng ngời ta cần nâng cao mức xám hay một khoảng mức xám nào đó Vì vậy, cần phải ánh xạ ảnh mức xám để lợc đồ mức xám của nó tuân theo một phân phối
xạ riêng biệt Để chuyển đổi ảnh gốc thành ảnh có lợc đồ mức xám các mức xám đồng đều chúng ta dùng hàm ánh xạ CDF, ví dụ:
∫
=
= T r r pr d s
0
) ( )
( ω ω (4.23)
mức xám đồng đều qua CDF nh sau:
∫
=
= G z z pz d v
0
) ( )
( ω ω (4.24)
Bởi vì ảnh ánh xạ vừa nhận đợc từ ảnh gốc, thì sau đó nó sẽ ánh xạ vào cùng ảnh có lợc
đồ mức xám đợc làm bằng nhau (đồng bộ) Đó là:
) ( )
G = (4.25)
) ( )
) ( )) ( (
1 T r F r G
Để có đợc giải pháp theo công thức giải tích (4.26) cho trờng hợp chung có thể là khó khăn hoặc không thể làm đợc Tuy nhiên, giải pháp đồ thị là rất có thể, và hình 4.13 minh
G(z) thu đợc mức xám ánh xạ z 1
Bởi vì trong thực tế chúng ta thờng xử lý ảnh rời rạc chứ không phải ảnh liên tục, nên CDF sẽ đợc viết lại nh sau:
∑
=
= r
i
o i n r
T
1
) ( )
( (4.28)
=
= z
i
n z
G
0
) ( )
( (4.29)
trị i trong ảnh gốc và ảnh ánh xạ Sự xấp xỉ nảy sinh trong trờng hợp rời rạc, dẫn đến khó
) 1 ( ) ( ) 1
Trang 14(xem hình 4.14.)
Hình 4.13 Biểu diễn đồ thị của công thức (4.26).
Hình 4.14 Biểu diễn đồ thị của trờng hợp mẫu.
Do vậy, dựa trên các vấn đề thảo luận ở trên và hình 4.14 chúng ta có thể thực hiện
1 Quy định lợc đồ mức xám cho ảnh ánh xạ
) 1 ( ) ( )
G
Thủ tục trên mang lại mảng ánh xạ
)) ( ( )
F
Kết quả này có thể đợc dùng để chuyển đổi ảnh gốc sang một ảnh có mức xám xấp xỉ với
ánh xạ chúng ánh xạ ảnh gốc và ảnh chuyển đổi thành ảnh san bằng mức xám Vì thế, công thức (4.28) và (4.29) sẽ đợc viết lại nh sau:
255 ) 0 ( ) 255 (
) 0 ( ) ( )
T T
T i n r
T
r i o
−
−
= ∑
G(z)
r1 r z1 z T(r)
G(z)
G(z1)
r1 r z1 z T(r)
T(r1)
Trang 15255 ) 0 ( ) 255 (
) 0 ( ) ( )
G G
G i n z
G
z i m
−
−
= ∑
Việc quy định lợc đồ mức xám Có một kỹ thuật chuẩn để sinh ra lợc đồ mức xám
cho ảnh chiếu Những kỹ thuật này đợc mô tả sau đây
Phân phối Gauss Phân phối cho rằng
2
2 / 2 ) (
)
Trong đó à = kỳ vọng toán học hay trị trung bình
σ = sai phơng
073 1 /
σ
à =
−
z
Do đó, σ biểu hiện bề rộng của phân phối
Tham số σ và à có thể đợc điều chỉnh cho đến khi đạt đợc kết quả mong muốn trên ảnh
ra Cần chú ý rằng thực hiện phép chiếu các lợc đồ mức xám khác nhau phụ thuộc vào ảnh, bởi vậy cần phải tăng cờng ảnh
Tuyến tính từng đoạn (Piecewise linear) Một cách tiếp cận xen kẽ linh động hơn
phơng pháp Gaussian là sử dụng các đoạn thẳng để biểu diễn phân phối mong muốn Hình
thu đợc ảnh mong muốn Hình 4.15 có thể đợc trình bày nh sau:
Hình 4.15 Hàm tuyến tính từng đoạn.
1 Tính:
) tan(
1 1
1
L
j
m
y
θ +
=
)
j
) tan(
) (
L
z p
θ
=
θL
θH
0 m 255 z
j 1
p(z)
Trang 16và với xj ≤ z ≤ m
j j j
j
x m
y h z
−
−
) (
3 Tính:
) tan(
255 25
) tan(
1 1
H k
k
H k
y x
m y
θ
θ
−
+
=
k k k
k
m x
h y z
−
−
) (
) 255 ( 255 )
x
y z
p
k
k
−
=
Phơng pháp xen kẽ trên, chỉ sử dụng hai đoạn thẳng, đợc chỉ trên hình 4.16
L
L
m
h z
R
R
m
h z
−
−
255 ) (
Hình 4.16 Xấp xỉ hai đoạn thẳng.
Các dạng phân phối khác Có một số dạng phân phối khác cũng đợc sử dụng để
nâng cao chất lợng ảnh Các dạng này đợc cho dới đây Với những dạng này chúng ta có thể
có đợc một giải pháp gần nhất với công thức (4.26)
pz(z)
h
0 m 255 z
Trang 17 Hàm mũ:
min )
( min
)
Hàm chuyển đổi đợc cho bởi
−
∝
−
r
0
min 2
) ( 2
2 min )
p
z z
∝
−
∝
−
−
(4.36) Hàm chuyển đổi đợc cho bởi
2 1
0
2 min
) ( 1
1 ln
2
−
∝ +
=
r r
ω ω
(4.37)
3 / 1 min 3
/ 1 max
3 / 2
3
1 ) (
z z
z z
pz
−
1 )
(
min
z z z
pz
−
Hàm chuyển đổi đợc cho bởi
∫
=
r
r d p
r
r r
) ( min
max min
ω ω
(4.41)
Bây giờ là lúc chúng ta phát triển các chơng trình biến đổi lợc đồ mức xám
Bài tập 4.3
1 Viết chơng trình C để thay đổi lợc đồ mức xám trên cơ sở hàm tuyến tính mức độ bộ phận hình 4.15 Kiểm tra chơng trình trên ảnh "ISLAM.IMG"
2 Tơng tự nh câu 1, nhng xuất phát từ các công thức (4.35), (4.37), (4.39), và (4.41)
3 Lập chơng trình cho phép bạn chọn hàm san bằng, gaussian, mũ, Rayleigh, hyperbolic (căn bậc 3), hoặc hyperbolic (logarith), sau đó ánh xạ ảnh thích hợp
Trang 18Hình 4.17 là ảnh "ISLAM.IMG" sau khi sử dụng phân phối gaussian với à = 125 và
150
073
.
1
trên hình 4.12b Tuy nhiên, bạn sẽ thử nghiệm với σ và à khác nhau để phát hiện ra u
điểm của phơng pháp này
Hình 4.17 ảnh xử lý dùng phân phối Gauss để biến đổi lợc đồ mức xám.
4.6 Lọc trung vị
Trung vị M của một tập hợp số đợc xác định sao cho một nửa các giá trị trong tập lớn hơn M hoặc một nửa các giá trị nhỏ hơn M Lọc trung vị trong ảnh đợc áp dụng bởi đầu tiên chọn một cửa sổ có kích thớc N, ở đây N chẵn Cửa sổ này hoặc miền cung cấp sẽ đợc quét qua ảnh Điểm trung tâm của miền cung cấp, tại bất kỳ nơi nào trong ảnh, đợc thay thế bằng trung vị của các giá trị điểm của các miền lân cận Lọc trung vị làm cho điểm
ảnh trở nên nổi trội hơn so với các điểm xung quanh Nó loại trừ ảnh hởng của các nhiễu kim, cải thiện khả năng chống nhiễu của tín hiệu Lọc trung vị có thể đợc bổ xung bằng các
Bài tập 4.4
Viết một chơng trình dựa trên sơ đồ hình 4.18 để đa ra lọc trung vị Kiểm tra lọc trung
vị trên ảnh thu đợc khi dùng biểu thức lợc đồ mức xám và giới thiệu trên hình 4.12b Chú ý rằng một ảnh thu đợc khi dùng biểu thức lợc đồ mức xám là một ảnh có nhiễu
Kết quả của sử dụng bộ lọc trung vị kích thớc 5 ì 5 đợc thể hiện trên hình 4.19 Có một vài cải thiện về chất lợng ảnh đợc hiển thị ở đây Tuy nhiên, chất lợng ảnh sẽ tốt hơn nếu
ta đem trung bình ảnh gốc với ảnh kết quả lọc trung vị