Tải bản đầy đủ (.doc) (68 trang)

De thi xu ly anh doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.21 MB, 68 trang )

Đề thi Xử Lý Ảnh GV: Trần Tiến Đức
Đề thi Xử Lý Ảnh
GV: Trần Tiến Đức
MỤC LỤC
ĐỀ THI VÀ ĐÁP ÁN MÔN XỬ LÝ ẢNH SỐ
Chương 3 gồm 13 câu từ câu 1 đến câu 13
Câu 1. Xây dựng và cài đặt thuật toán làm âm ảnh.
Đáp án:
 !"#$%
#$&'(%#$&')
*')+,) /#$&')01(23&'(%#'4.35
678(869
Cod e:
void Negatives(BYTE **f, BYTE **g)
{
int x, y;
BYTE r,s;
for (x=0; x<M; x++)
for (y=0; y<N; y++) {
r = f[x][y];

:
;
<=%=>


Đề thi Xử Lý Ảnh GV: Trần Tiến Đức
s = L-1-r;
g[x][y] = s;
}
return;


}
Câu 2. Xây dựng và cài đặt thuật toán biến đổi logarit ảnh.
Đáp án:
?35@3
<A>

• #$&'(
• #$&')
• "B
• <A>C=9
*')+, C7D9
Hằng số c được nh như sau:
E)   <A>
;F==
E) &       
 
)11log(
1
−+

L
L
 G23 ! H 9IJ I
Cod e:
void Logarithm(BYTE **f, BYTE
**g)
{
int x, y;
double r,s;
double c = (L-

1)/log(1.0*L);
for (x=0; x<M; x++)
for (y=0; y<N; y++) {
r = f[x][y];
s = c*log(1+r);
g[x][y] = (int)s;
}
return;
}

K63.



<=%=>
L6)M(6
Đề thi Xử Lý Ảnh GV: Trần Tiến Đức
Câu 3. Xây dựng và cài đặt thuật toán biến đổi lũy thừa ảnh.
Đáp án:
N35@3O.P)

Q
(23#$&'(%#$&')%
%Q"B9
• QR
• QS"39
c: được nh như sau:
E) D+,
• ==
• 

 <>
Q
 
γ
)1(
1


L
L
Cod e:
void Power(BYTE **f, BYTE **g)
{
int x, y;
double r,s;
double gamma = 5.0;
double c = (L-1)/pow(1.0*(L-1),gamma);
for (x=0; x<M; x++)
for (y=0; y<N; y++) {
r = f[x][y];
s = c*pow(1.0*r,gamma);;
g[x][y] = (int)s;
}
return;
}
T

γ=0,4
γ=1
γ=1,5

S
R
Đề thi Xử Lý Ảnh GV: Trần Tiến Đức
Câu 4. Xây dựng và cài đặt thuật toán biến đổi tuyến tính từng phần.
Đáp án:
Quan sát trên đồ thị ta thấy:
N35@36U63V'%8U783V'9E#
WXY)<Z[3\X>9
Ta có:
?C]3^')3_<$%.>(<$%.>
12
1
yy
yy



12
1
xx
xx


`
12
12
xx
yy



<$$>A.
• abK3_<=%=>(<%>
:
1
1
r
s

• abKK3_<%>(<%>
H


L-1
L-1
r
<%>
<%>
Đề thi Xử Lý Ảnh GV: Trần Tiến Đức
:
12
12
rr
ss


<>A
• abKKK3_<%>(<%>
:
2)1(
2)1(

rL
sL
−−
−−
<>A
<%>(<%>29
Cod e:
void PiecewiseLinear(BYTE **f, BYTE **g)
{
double r1,s1,r2,s2,rmin,rmax,s,r,m,sum;
int x, y;
rmin = f[0][0];
rmax = f[0][0];
for (x=0; x<M; x++)
for (y=0; y<N; y++) {
r = f[x][y];
if (r<rmin)
rmin = r;
if (r>rmax)
rmax = r;
}
r1 = rmin;
s1 = 0;
r2 = rmax;
s2 = L-1;
for (x=0; x<M; x++)
for (y=0; y<N; y++) {
r = f[x][y];
if (r<r1)
s = s1/r1*r;

else if (r<r2)
s = (s2-s1)/(r2-r1)*(r-r1)+s1;
else
s = (L-1-s2)/(L-1-r2)*(r-r2)+s2;
g[x][y] = (int)s;
}
return;
}
Câu 5. Xây dựng và cài đặt thuật toán cân bằng histogram.
Đáp án:
/cUY)3)3)+V'9d3)WX
Y)9

Đề thi Xử Lý Ảnh GV: Trần Tiến Đức
3)
E<><>

r
r
dwwp
0
)(
(23
r
<e>f'-$.)#$w
E$'-%gY)4X"39h#Dw353D
c%)Zh_49E)3Bih#C3b

Z
E<

Z
><>

=
k
j
jr
rp
0
)(
(23Z=%%%j%
Cod e:
void HistogramEqualization(BYTE **f, BYTE **g)
{
double T[L];
int k, j, x, y;
BYTE r;
double s;
double p[L];
Histogram(f,p);
for (k=0; k<L; k++) {
T[k] = 0;
for (j=0; j<=k; j++)
T[k] = T[k] + p[j];
}
for (x=0; x<M; x++)
for (y=0; y<N; y++) {
r = f[x][y];
s = T[r];
g[x][y] = (int)(s*(L-1));

}
return;
}
Câu 6. Xây dựng và cài đặt thuật toán đặc tả histogram.
Đáp án:
dh33)kO"%Dh3Z3)3)(V3)
)'"9
!
Đề thi Xử Lý Ảnh GV: Trần Tiến Đức
EU3)Y)+3'.)35@33)lX


<r
m
>
MN
n
j

Z
E<
Z
>

=
k
j
jr
rp
0

)(
3)'"
n
<z
i
>
N35@33)'"9
(
Z
o<n
Z
>
k
k
j
jz
szp =

=0
)(

Z
%)'.)n
Z
)'
n
Z
o

<E<

Z
>>
Mục êu:#$&'(
Z
%)'.)#$&')n
Z
9
GUBc3)'"(p)'
q
Đề thi Xử Lý Ảnh GV: Trần Tiến Đức
a_h3)'"(p%)BiC]3^'))3
3_<$

%.

>(<$

%.

>
12
1
yy
yy



12
1
xx

xx


S.
12
12
xx
yy


<$$>A.
Cod e:
void HistogramSpecification(BYTE **f, BYTE **g)
{
double pz1,pz2,pz3,pz4,pz5,pz6;
int z1,z2,z3,z4,z5,z6;
double pz[L];
double G[L];
double pr[L];
double T[L];
double sum;
int z, k, i, j, x, y;
// Histogram dac ta
z1 = 0; pz1 = 0.75;
z2 = 10; pz2 = 7;
z3 = 20; pz3 = 0.75;
z4 = 180; pz4 = 0;
z5 = 200; pz5 = 0.7;
z6 = 255; pz6 = 0;
for (z=0; z<L; z++)

if (z<z2)
pz[z] = (pz2-pz1)/(z2-z1)*(z-z1) + pz1;
else if (z<z3)
pz[z] = (pz3-pz2)/(z3-z2)*(z-z2) + pz2;
else if (z<z4)
J
Đề thi Xử Lý Ảnh GV: Trần Tiến Đức
pz[z] = (pz4-pz3)/(z4-z3)*(z-z3) + pz3;
else if (z<z5)
pz[z] = (pz5-pz4)/(z5-z4)*(z-z4) + pz4;
else
pz[z] = (pz6-pz5)/(z6-z5)*(z-z5) + pz5;
// Chuan hoa pz sao cho tong xac suat bang 1
sum = 0;
for (z=0; z<L; z++)
sum += pz[z];
for (z=0; z<L; z++)
pz[z] = pz[z]/sum;
for (k=0; k<L; k++) {
G[k] = 0;
for (i=0; i<=k; i++)
G[k] = G[k] + pz[i];
}
// Histogram cua anh
Histogram(f,pr);
for (k=0; k<L; k++) {
T[k] = 0;
for (j=0; j<=k; j++)
T[k] = T[k] + pr[j];
}

// Matching 2 histogram
BYTE r;
double s;
for (x=0; x<M; x++)
for (y=0; y<N; y++) {
r = f[x][y];
s = T[r];
for (k=0; k<L; k++)
if (G[k]>=s)
break;
g[x][y] = k;
}
return;
}
Câu 7. Xây dựng và cài đặt thuật toán cân bằng histogram cục bộ.
Đáp án:
EC#$ZV)'Dr^'s%5')3)lX
pZhZ5^'9EC)3Bi3)cX9
tu)@ZU2v_&u'%(UBcT%3)Y)Bw
3r' Pu)@().&u'&u239
I
Đề thi Xử Lý Ảnh GV: Trần Tiến Đức
Cod e:
void LocalHistogram(BYTE **w, int m, int n, double *p)
{
int x, y, k;
BYTE r;
for (k=0; k<L; k++)
p[k] = 0;
for (x=0; x<m; x++)

for (y=0; y<n; y++) {
r = w[x][y];
p[r]++;
}
for (k=0; k<L; k++)
p[k] = p[k]/(m*n);
return;
}
void LocalHistogramEqualization(double *p, double *T)
{
int j, k;
for (k=0; k<L; k++) {
T[k] = 0;
for (j=0; j<=k; j++)
T[k] = T[k] + p[j];
}
return;
}
void LocalEnhancement(BYTE **f, BYTE **g)
{
int m, n;
m = 3; n = 3;
BYTE **w;
int x, y, s, t, a, b;
a = m/2;
b = n/2;
double p[L];
double T[L];
BYTE r;
w = (BYTE **)Alloc2D(m,n,sizeof(BYTE));

for (x=a; x<M-a; x++)
for (y=b; y<N-b; y++) {
for (s=-a; s<=a; s++)
for (t=-b; t<=b; t++)
w[s+a][t+b] = f[x+s][y+t];
LocalHistogram(w,m,n,p);
LocalHistogramEqualization(p,T);
r = f[x][y];
g[x][y] = (int)((L-1)*T[r]);
}
=
Đề thi Xử Lý Ảnh GV: Trần Tiến Đức
Free2D((void **)w);
return;
}
Câu 8. Xây dựng và cài đặt thuật toán nâng cao chất lượng ảnh bằng
thống kê histogram.
Đáp án:
L5'lDr#$^'s3)XpZh
lDr9L5'3)cX#PZ"3%)p
 lDrb3).@39
G(4.7&.)D')MD''xtZ"3_F9
E3D''xtZ"3W#(b3"ZD6)<3,').3,
Zy(t>(()3)6<)3>9f6$[(UBc)'
E)
6)
N
1



=
1
0
N
i
i
x
(
()3)6
N
1



=
1
0
2
)(
N
i
meanx
i
Xr'x
iancevar
GUBc"3r'
z= J={(zJ I{
x x-mean (x-mean)
2
0

8
12
20
-10
-2
2
10
100
4
4
10
()3)6=J|H 
B6(3)M
iancevar
q9

Đề thi Xử Lý Ảnh GV: Trần Tiến Đức
x x-mean (x-mean)
2
8
9
11
12
2
-1
1
2
4
1
1

4
G)3)6=|H9
}6(3)M
iancevar
9 J
Ý nghĩa:
G)3)6<)3>Bi_lY)Bw3r'$)).&3,6)9L5'()3)6
Zh~)Bw3r')'9
a_Z"3Bw3r'(23)'6)(()3)6Y)Z"33&)'9
Tiêu chuẩn chọn khối trong ảnh để làm rõ:

)3%• Xr'x9
d"3tT€T9
o<$%.>





),(
),(
yxf
yxEf

$.
6)Y)Z"3

o
6)Y)X
$.

Xr'xZ"3
o
Xr'xY)X9
(23•H9=%Z
=
=9H%Z

=9=%Z

=9H9
Cod e:
double Mean(BYTE **a, int sizex, int sizey)
{
double m;
int x, y;
m = 0;
for (x=0; x<sizex; x++)
for (y=0; y<sizey; y++)

L5'
$.
RZ
=

o
(Z
 o
R
$.
RZ

 o
L5'b3
Đề thi Xử Lý Ảnh GV: Trần Tiến Đức
m = m + a[x][y];
m = m/(sizex*sizey);
return m;
}
double StandardDeviation(BYTE **a, int sizex, int sizey, double mean)
{
double variance;
int x, y;
variance = 0;
for (x=0; x<sizex; x++)
for (y=0; y<sizey; y++)
variance = variance + (a[x][y]-mean)*(a[x][y]-mean);
variance = variance/(sizex*sizey);
return sqrt(variance);
}
void HistogramStatistics(BYTE **f, BYTE **g)
{
int m, n;
m = 3; n = 3;
BYTE **w;
int x, y, s, t, a, b;
a = m/2;
b = n/2;
double MG, DG, msxy, sigmasxy;
double E = 4.0, k0 = 0.4, k1 = 0.02, k2 = 0.4;
MG = Mean(f,M,N);
DG = StandardDeviation(f,M,N,MG);

w = (BYTE **)Alloc2D(m,n,sizeof(BYTE));
for (x=a; x<M-a; x++)
for (y=b; y<N-b; y++) {
for (s=-a; s<=a; s++)
for (t=-b; t<=b; t++)
w[s+a][t+b] = f[x+s][y+t];
msxy = Mean(w,m,n);
sigmasxy = StandardDeviation(w,m,n,msxy);
if (msxy <= k0*MG && (k1*DG <= sigmasxy && sigmasxy <=
k2*DG))
g[x][y] = (int)E*f[x][y];
else
g[x][y] = f[x][y];
}
Free2D((void **)w);
return;
}
T
Đề thi Xử Lý Ảnh GV: Trần Tiến Đức
Câu 9. Xây dựng và cài đặt thuật toán lọc tuyến tính làm trơn.
Đáp án:
LC3)BiXu)@st3‚b<).Xt>%]bXtZU2
T$T9
tZh3)
o<$%.>e<%>ƒ<$%.>Ae<%=>ƒ<$%.>AjAe<=%=>ƒ<$%.>AjAe<%>ƒ<$A%.A>
/‚btC3)pi.(3c_9
E@^'tZh3)
<x%y>

−=

a
as

−=
++
b
bt
tysxftsw ),(),(
E
$ZU2Y)Xt%(C"v_Xt&u'9
)|(|ZU2w)Xt9
?[tZh3)t3@4<('M>9
a"3(23t'.5g%‚btCXt'9
GUBc‚bt'(‚bo)'
Co de :
void Convolution(BYTE **f, int M, int N, BYTE **g, double **w, int m, int n,
BOOL border)
{
int bx, by, a, b, x, y, s, t, p, q;
double r;
a = m/2; b = n/2;
if (border) {
bx = 0;
by = 0;
}
else {
bx = a;
by = b;
}
for (x=bx; x<M-bx; x++)

for (y=by; y<N-by; y++) {
r = 0;
for (s=-a; s<=a; s++)
for (t=-b; t<=b; t++) {
p = x+s;
H
x
9
1
1 1 1
1 1 1
1 1 1
16
1
x
1 2 1
2 4 2
1 2 1
Đề thi Xử Lý Ảnh GV: Trần Tiến Đức
q = y+t;
if (p<0)
p = p+M;
if (p>=M)
p = p-M;
if (q<0)
q = q+N;
if (q>=N)
q = q-N;
r = r + w[s+a][t+b]*f[p][q];
}

g[x][y] = (int)r;
}
return;
}
void LinearFilter(BYTE **f, BYTE **g)
{
int m, n;
m = 35; n = 35;
double **w;
w = (double **)Alloc2D(m,n,sizeof(double));
int s, t;
for (s=0; s<m; s++)
for (t=0; t<n; t++)
w[s][t] = 1.0/(m*n);
Convolution(f, M, N, g, w, m, n, TRUE);
Free2D((void **)w);
return;
}
Câu 10. Xây dựng và cài đặt thuật toán lọc median.
Đáp án:
t6B3)<t'(,> (,UU3w)9
t6B3)‚3r3r'^'Z33„'$'%3„'$'•t33„'
'"3MD'9L3„''"3MD'w"6("89
El3rt6B3))'
 "3r'(Pu)@<T$T>9EbX3V'%8WB&(&uƒ<$%.>).
&uU3w)9
void Sort(BYTE **a, int sizex, int sizey)
{
int i, j;
BYTE *b = *a;

BYTE temp;

Đề thi Xử Lý Ảnh GV: Trần Tiến Đức
int n = sizex*sizey;
for (i=0; i<n-1; i++)
for (j=i+1; j<n; j++)
if (b[i] > b[j]) {
temp = b[i];
b[i] = b[j];
b[j] = temp;
}
return;
}
void MedianFilter(BYTE **f, BYTE **g)
{
int m=3,n=3;
int a,b,x,y,s,t;
a = m/2; b = n/2;
BYTE **w;
w = (BYTE **)Alloc2D(m,n,sizeof(BYTE));
for (x=a; x<M-a; x++)
for (y=b; y<N-b; y++) {
for (s=-a; s<=a; s++)
for (t=-b; t<=b; t++)
w[s+a][t+b] = f[x+s][y+t];
Sort(w,m,n);
g[x][y] = w[a][b];
}
Free2D((void **)w);
return;

}
Câu 11. Xây dựng và cài đặt thuật toán nâng cao chất lượng ảnh bằng đạo
hàm cấp một.
Đáp án:
LC3)Bib-X‚-)3_WX[Y)9
`D'&')t-X
- ab-X=3V#$+V'9
- ab-XZ=73_&'Y)#$2‚#$)339
- ab-XZ=Bt6#$)339
ab-XY))33V't3)B36%Z…3r'


(,~)
)'
!
Đề thi Xử Lý Ảnh GV: Trần Tiến Đức

)B<ƒ>






y
x
g
g


















y
f
x
f

x
f
g
x


=
b-X6$
y
f

g
y


=
b-X6.
ab-X6$,~)
x
f


ƒ<$A%.>ƒ<$%.>
ab-X6.,~)
y
f


ƒ<$%.A>†ƒ<$%.>
aX2Y)(6)B36ƒZU3r'
/<$%.>)<

ƒ>
22
yx
gg
+
L5'gW4)3p'D)g,'.r"3)9
/<$%.>

‡

$
‡A‡
.

ot3"3r'‚bT$T
z
1
z
2
z
3
z
4
z
5
z
6
z
7
z
8
z
9
ab-X62$
$
n
J
n

ab-X62.

.
n
!
n

L;6\,~)b-X6$)'
$
n
I
n

(b-X6.
.
n
J
n
!
q
Đề thi Xử Lý Ảnh GV: Trần Tiến Đức
E))3‚b
$
(
.
(t3‚b;69
/‚b;6ZU2ˆDZh&u'9}:6\7X
,~)b-X)'

$

x

f


<n
q
An
J
An
I
><n

An

An
T
>
(
.

y
f


<n
T
An
!
An
I
><n


An
H
An>
G35B23Bb‚b)'
Cod e:
void ConvolutionInt(BYTE **f, int M, int N, int **g, double **w, int m, int n,
BOOL border)
{
int bx, by, a, b, x, y, s, t, p, q;
double r;
a = m/2; b = n/2;
if (border) {
bx = 0;
by = 0;
}
else {
bx = a;
by = b;
}
for (x=bx; x<M-bx; x++)
for (y=by; y<N-by; y++) {
r = 0;
for (s=-a; s<=a; s++)
for (t=-b; t<=b; t++) {
p = x+s;
J
Đề thi Xử Lý Ảnh GV: Trần Tiến Đức
q = y+t;
if (p<0)

p = p+M;
if (p>=M)
p = p-M;
if (q<0)
q = q+N;
if (q>=N)
q = q-N;
r = r + w[s+a][t+b]*f[p][q];
}
g[x][y] = (int)r;
}
return;
}
void Gradient(BYTE **f, BYTE **g)
{
int **gx, **gy, **Mag;
int x, y;
gx = (int **)Alloc2D(M,N,sizeof(int));
gy = (int **)Alloc2D(M,N,sizeof(int));
Mag = (int **)Alloc2D(M,N,sizeof(int));
int m = 3, n = 3;
double **Sobelx, **Sobely;
Sobelx = (double **)Alloc2D(m,n,sizeof(double));
Sobely = (double **)Alloc2D(m,n,sizeof(double));
Sobelx[0][0] = -1; Sobelx[0][1] = -2; Sobelx[0][2] = -1;
Sobelx[1][0] = 0; Sobelx[1][1] = 0; Sobelx[1][2] = 0;
Sobelx[2][0] = 1; Sobelx[2][1] = 2; Sobelx[2][2] = 1;
Sobely[0][0] = -1; Sobely[0][1] = 0; Sobely[0][2] = 1;
Sobely[1][0] = -2; Sobely[1][1] = 0; Sobely[1][2] = 2;
Sobely[2][0] = -1; Sobely[2][1] = 0; Sobely[2][2] = 1;

ConvolutionInt(f,M,N,gx,Sobelx,m,n,TRUE);
ConvolutionInt(f,M,N,gy,Sobely,m,n,TRUE);
for (x=0; x<M; x++)
for (y=0; y<N; y++)
Mag[x][y] = abs(gx[x][y]) + abs(gy[x][y]);
int max,r;
max = Mag[0][0];
for (x=0; x<M; x++)
for (y=0; y<N; y++)
if (Mag[x][y] > max)
max = Mag[x][y];
for (x=0; x<M; x++)
for (y=0; y<N; y++) {
r = Mag[x][y];
I
Đề thi Xử Lý Ảnh GV: Trần Tiến Đức
g[x][y] = (int)(1.0*r/max*255);
}
Free2D((void **)gx);
Free2D((void **)gy);
Free2D((void **)Mag);
Free2D((void **)Sobelx);
Free2D((void **)Sobely);
return;
}
Câu 12. Xây dựng và cài đặt thuật toán nâng cao độ nét của ảnh bằng đạo
hàm cấp hai.
Đáp án:
`D'&'Y)b-)3
- ab-)3=7(i#$+V'9

- ab-)3Z=7&'('"3Y)#$2‚#$)339
- ab-)3=Bt6#$)339
a,~)b-)3Y)X3V')'
x
f
2
2


ƒ<$A>Aƒ<$>†ƒ<$>
a,~)b-)3Y))335
f
2


2
2
x
f


A
2
2
y
f



)B36<b-XY)35>

ab-Y)•t3u))69
L8b3
ab-)362$
2
2
x
f


ƒ<$A%.>Aƒ<$%.>ƒ<$%.>
ab-)362.
2
2
y
f


ƒ<$%.A>Aƒ<$%.>ƒ<$%.>
ab-)3Y)
=
Đề thi Xử Lý Ảnh GV: Trần Tiến Đức
),(
2
yxf

ƒ<$A%.>Aƒ<$%.>Aƒ<$%.A>Aƒ<$%.>Hƒ<$%.>
‰).(35B23Bb‚b)'
E)7XD‚b-)3)'
Ei.3)Bi‚bi9
Nâng cao độ nét của ảnh được cho bằng phương trình:

<$%.>ƒ<$%.>Az
f
2

<$%.>{
E
5'‚b
5'‚bB
/#$&')p3,s=(2 D)3'x)_#$&'
)Z=99 9
a3-5'&')3,=%5'&')S  9
'x)Z

Đề thi Xử Lý Ảnh GV: Trần Tiến Đức
E)3,3<3,>()$%)3'._Z3)$(=j h
#)'
z${z.{
minmax
min]][[


yxg

Cod e:
void ConvolutionInt(BYTE **f, int M, int N, int **g, double **w, int m, int n,
BOOL border)
{
int bx, by, a, b, x, y, s, t, p, q;
double r;
a = m/2; b = n/2;

if (border) {
bx = 0;
by = 0;
}
else {
bx = a;
by = b;
}
for (x=bx; x<M-bx; x++)
for (y=by; y<N-by; y++) {
r = 0;
for (s=-a; s<=a; s++)
for (t=-b; t<=b; t++) {
p = x+s;
q = y+t;
if (p<0)
p = p+M;
if (p>=M)
p = p-M;
if (q<0)
q = q+N;
if (q>=N)
q = q-N;
r = r + w[s+a][t+b]*f[p][q];
}
g[x][y] = (int)r;
}
return;
}
void Laplace(BYTE **f, BYTE **g)

{
int **temp;
int x, y, r;
temp = (int **)Alloc2D(M,N,sizeof(int));
int m = 3, n = 3;
double **w;

Đề thi Xử Lý Ảnh GV: Trần Tiến Đức
w = (double **)Alloc2D(m,n,sizeof(double));
w[0][0] = 0; w[0][1] = 1; w[0][2] = 0;
w[1][0] = 1; w[1][1] = -4; w[1][2] = 1;
w[2][0] = 0; w[2][1] = 1; w[2][2] = 0;
ConvolutionInt(f,M,N,temp,w,m,n,TRUE);
// Chuan hoa anh Laplace
int min;
min = temp[0][0];
int max;
max = temp[0][0];
for (x=0; x<M; x++)
for (y=0; y<N; y++) {
if (temp[x][y] < min)
min = temp[x][y];
if (temp[x][y] > max)
max = temp[x][y];
}
double scale = 0.3;
for (x=0; x<M; x++)
for (y=0; y<N; y++)
temp[x][y] = (int)(scale*(temp[x][y]-min)/(max-min)* 255);
for (x=0; x<M; x++)

for (y=0; y<N; y++) {
r = f[x][y] - temp[x][y];
if (r < 0)
r = 0;
if (r > 255)
r = 255;
g[x][y] = r;
}
Free2D((void **)temp);
Free2D((void **)w);
return;
}
Câu 13. Xây dựng và cài đặt thuật toán nâng cao độ nét ảnh bằng mặt nạ
làm nhòe và lọc tăng cường.
Đáp án:
L)X[Y)Bi‚b•6CBihr3%^'
+2)'.
- •69
-  "P(23\•6)X23t3‚b•69
- X‚b•6(23"9
T
Đề thi Xử Lý Ảnh GV: Trần Tiến Đức
dU3r'
_______
),( yxf
\•6%
/‚b•63_'B3„)'
)Z<$%.>ƒ<$%.>
_______
),( yxf

<$%.>ƒ<$%.>AZ9)Z<$%.>
ZtS=%Z3Z)t3‚b•6%Z3ZS)t3tWC9
/‚bo)'Bi_•6
)'<$%.>
2
22
2
σ
yx
e
+

σ
: Xr'x29
Cod e:
void ConvolutionDouble(BYTE **f, int M, int N, double **g, double **w, int m,
int n, BOOL border)
{
int bx, by, a, b, x, y, s, t, p, q;
double r;
a = m/2; b = n/2;
if (border) {
bx = 0;
by = 0;
}
else {
bx = a;
by = b;
}
for (x=bx; x<M-bx; x++)

for (y=by; y<N-by; y++) {
r = 0;
for (s=-a; s<=a; s++)
for (t=-b; t<=b; t++) {
p = x+s;
q = y+t;
if (p<0)
p = p+M;
if (p>=M)
p = p-M;
if (q<0)
q = q+N;
if (q>=N)
q = q-N;
r = r + w[s+a][t+b]*f[p][q];
}
g[x][y] = r;
}
return;
}
H
Đề thi Xử Lý Ảnh GV: Trần Tiến Đức
void UnsharpMask(BYTE **f, BYTE **g)
{
double **Gauss, sigma=3, sum;
int x, y;
int m = 5, n = 5;
double **fbar, **gmask;
fbar = (double **)Alloc2D(M,N,sizeof(double));
// Tao mat na Gauss

Gauss = (double **)Alloc2D(m,n,sizeof(double));
for (x=-m/2; x<=m/2; x++)
for (y=-n/2; y<=n/2; y++)
Gauss[x+2][y+2] = exp(-(1.0*x*x+1.0*y*y)/(2*sigma*sigma));
sum = 0;
for (x=0; x<m; x++)
for (y=0; y<n; y++)
sum += Gauss[x][y];
for (x=0; x<m; x++)
for (y=0; y<n; y++)
Gauss[x][y] = Gauss[x][y]/sum;
ConvolutionDouble(f, M, N, fbar, Gauss, m, n, TRUE);
gmask = (double **)Alloc2D(M,N,sizeof(double));
for (x=0; x<M; x++)
for (y=0; y<N; y++)
gmask[x][y] = (f[x][y] - fbar[x][y]);
int s;
double k = 4.5;
for (x=0; x<M; x++)
for (y=0; y<N; y++) {
s = int(f[x][y] + k*gmask[x][y]);
if (s > 255)
s = 255;
if (s < 0)
s = 0;
g[x][y] = s;
}
Free2D((void **)Gauss);
Free2D((void **)fbar);
Free2D((void **)gmask);

return;
}

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×