1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Nén Ảnh part 6 docx

12 185 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 12
Dung lượng 353,2 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Trong bước này, các giá trị nhị phân biểu diễn một độ chói cụ thể.. Biểu vì biến đổi ngược của lượng tử hoá là biến đổi từ nhiều vào một, nên quá trình này không thể tiến hành một cách t

Trang 1

thành N miền và gán cho mỗi miền một giá trị nhị phân như trong hình

13.14 Sự biểu diễn này không có ý nghĩa gì về mặt vật lý, và chức năng của sự biểu diễn này, như chúng ta muốn, chỉ dùng trong lĩnh vực xử lý

tín hiệu số Tất cả các tín hiệu số này gọi là điều mã xung (Pulse Code

Modulated - PCM) Để có thể thực sự thấy giá trị các mức xám chúng ta cần lượng tử hoá ngược Trong bước này, các giá trị nhị phân biểu diễn một độ chói cụ thể Các bước thực sự của quá trình này biểu diễn trong hình 13.15 Trong lĩnh vực tương tự và lĩnh vực số quá trình này gọi là

chuyển đổi từ tương tự sang số (A/D) và chuyển đổi từ số sang tương tự

(D/A)

Trong các ứng dụng như trường hợp biến đổi cosin 2-D thì có một chút khác biệt Cái mà chúng ta cần làm trong trường hợp này là biến đổi từ một tập hợp các dấu phẩy động sang một tập hợp các bít nhị phân và ngược lại Biểu vì biến đổi ngược của lượng tử hoá là biến đổi từ nhiều vào một, nên quá trình này không thể tiến hành một cách thông thường

được May mắn thay, có một số phương pháp để lượng tử hoá và lượng tử hoá ngược Chúng ta sẽ nghiên cứu các phương pháp này ở phần dưới

đây

dN

dN-1

d5

d4

d3

d2

d1

d0

N-1 N-2

4

3

2

1

0

11111111

11111110

00000100

00000011

00000010

00000001

00000000

YU

YL

Dạng thập phân Dạng nhị phân

di { i= 0, ,1} là các mức chia

Trang 2

Hình 13.14 Lượng tử hoá

13.5.1 Lượng tử hoá đồng đều

Đây là dạng đơn giản nhất của lượng tử hoá Trong dạng lượng tử hoá

này, khoảng (y u - y L ) được chia thành N khoảng cách đều nhau (xem

trong hình 13.14) Các giá trị từ d 0 đến d N được gọi là các mức chia Các mức lượng tử biểu diễn giá trị thực của các mức chia trong khoảng từ d i

đến d i+1 dưới dạng số nhị phân bằng i

Vì vậy, nếu như d i+1 < y  d i thì giá trị của lượng tử đầu ra = i

Mức lượng tử đầu ra có thể biểu diễn theo công thức:

y y

y y i

L v

ở đây dấu   có nghĩa là làm tròn thành số nguyên gần nhất

Lượng tử hoá ngược dùng một bảng biến đổi ngược giữa giá trị lượng

tử i và biến đổi ngược của nó r i

2 1

i i

i

d d r

Tuy nhiên lượng tử hoá đồng đều không quan tâm đến khả năng xảy ra của sự kiện với các giá trị được đưa ra Tổng quát, quá trình lượng tử hoá này áp dụng cho trường hợp tất cả các mức có khả năng xuất hiện bằng nhau Điều này, trong hầu hết các trường hợp là không đúng Dễ nhận thấy là các mức lượng tử hoá tập trung nhiều nhất vào miền mà khả năng xuất hiện của các mức xám nhiều nhất Điều này dẫn chúng ta đến phương pháp thiết kế lượng tử hoá dưới đây

Hình 13.15 Lượng tử hoá ngược

Tín hiệu

ánh sáng

Tín hiệu tương tự

t

t

Lượng

tử hoá

ngược hay biến đổi

số sang

Bộ lọc thông thấp

Tín hiệu

dạng nhị

phân

Mức

được tái thiết

Trang 3

13.5.2 Lượng tử hoá không đồng đều

Trong phần này chúng ta sẽ xem xét phương pháp lượng tử hoá không

đồng đều tối ưu nhất trong hệ thống PCM Các nghiên cứu cho phương pháp này đã được Panter và Dite đưa ra trong một cuốn sách xuất bản vào năm 1949 Trong cuốn sách này họ đã đưa giải thuật cho lượng tử hoá không đồng đều Họ đưa ra một phương pháp xấp xỉ tối ưu cho lượng tử hoá không đồng đều Giải thuật này sẽ không đúng cho các trường hợp quá trình lượng tử hoá có quá ít mức chia Tuy nhiên các giải thuật này

được phát triển một các trọn vẹn trong một báo cáo chưa được xuất bản của Lloyd vào năm 1957 và được Max kiểm nghiệm vào năm 1960 Một phương pháp lượng tử hoá kết hợp cả hai phương pháp của Lloyd và Max thường được gọi là phương pháp lượng tử hoá Lloyd-Max Trong phần báo cáo xuất bản sau đó của Lloyd xuất bản vào năm 1982 đã cho thấy

có rất nhiều ứng dụng rất thú vị của phương pháp này Bản báo cáo này

có hai phương pháp thiết kế, một phương pháp trong đó giống phương pháp của Max Phương pháp này gọi là phương pháp II Phương pháp I tỏ

ra có nhiều ứng dụng và dễ tính toán hơn phương pháp II Cả hai phương pháp thiết kế này đều được trình bày ở phần dưới đây

Nếu chúng ta coi rằng các mức lượng tử hoá được cho bởi

d i , i = 0 N

(xem hình 13.16) và các mức khôi phục cho bởi

r i , i = 0 N

và giá trị đo của tất cả các mức này cho bởi:

 

N k

d

d k

k

k

dy y p r y E

0

2 1

) ( )

ở đây y là tín hiệu đầu vào còn p(y) là khả năng xuất hiện của y

Trang 4

Hình 13.16 Các mức lấy mẫu và khôi phục

Hình 13.17 Các xử lý lấy mẫu và khôi phục

Hình 13.17 cung cấp sơ đồ khối của quá trình lượng tử hoá và lượng tử

hoá ngược Tín hiệu vào y(t) phải được coi là đã biết khả năng xuất hiện

Vấn đề đặt ra là phải xác định các mức lấy mẫu và các mức khôi phục sao cho méo tín hiệu là nhỏ nhất

Viết lại biểu thức (13.49 ):

i

i

d

d

i d

d

dy y p r y dy

y p r y E

1 1

0

) ( ) (

) ( )

dN

dN-1

d5

d4

d3

d2

d1

d0

yL

yu

y

mẫu i Lượng tử hoá Lượng tử hoá

ngược

i

N-1

3

2

1

0

i ri

r0 LUT cho lượng

tử hoá ngược

Trang 5

(  ) ( )   (  ) ( )

N

N d

r

Vi phân (13.50) theo d I và cho biểu thức này bằng không chúng ta

được

d ir ir i1

i = 1,2,3, ,N

Lấy vi phân (13.50) theo r i chúng ta được

1

) ( ) ( 2

i

i

d

d

i i

dy y p r y r

E

1 1

) (

) (

i

i

i

i

d

d

d

d i

dy y p

dy y yp

i = 0, 1, , N - 1

Hình 13.18 Phương pháp Newton-Raphson cho tính các biểu thức trong

ngoặc

Biểu thức (13.50) và biểu thức (13.51) đưa ra phương pháp xác định các mức lấy mẫu và các mức khôi phục dùng cho cả phương pháp của Lloyd-Max hoặc là phương pháp Lloyd

Phương pháp Lloyd-Max Lloyd và Max đã phát triển độc lập thuật

toán để giải quyết biểu thức (13.50) và (13.51) Các chi tiết của thuật toán này vẫn chưa được cung cấp Trong phần này tôi sẽ cung cấp cho bạn một thuật toán dựa trên thuật toán Lloyd-Max nhưng có các chi tiết

Trang 6

cụ thể hơn Tôi cũng sẽ cung cấp cho bạn phần mềm thiết kế N mức lấy mẫu và khôi phục

Thuật toán này gồm các bước sau:

1 Chọn một giá trị cho r 0 d 0 và d N được coi là đã biết

2 Cho i = 1,2, ,N - 1

a Tính d i từ

i

i

i

i i

d

d

d

d i

dy y p

dy y yp r

1

1

) (

) ( 1

b Tính r i từ

r i  2d ir i1

3 Tính

N

N

N

N

d

d

d

d

dy y p

dy y yp r

1

1

) (

) ( /

4 Nếu r N-1  r / , thay đổi lại r 0 và lặp lại các bước từ bước 2 cho đến bước 4

Bây giờ tôi sẽ cung cấp cho bạn các chi tiết cần thiết để tạo ra thuật toán trên

Chi tiết cho việc tính d i trong bước 2a của thuật toán Lloyd-Max d i có thể tính theo hàm sau đây:

 

i

i

i

i

d

d

d

d i i

dy y p

dy y yp r

d f

1

1

) (

) ( )

Có thể rút ra biểu thức gốc theo công thức lặp Newton-Raphon được cho bởi:

Trang 7

) (

) ( /

1

l i

l i l

i

l i

d f

d f d

ở đây l là số lần lặp và f /

(d i ) là đạo hàm của f(d i ) theo d i cho theo công thức:

i

i

i

i i

i

d

d

d

d i d

d

i i

dy y p

dy y yp d

dy y p

d p d

f

1 1

1

) (

) (

) (

) ( )

(

d 0 i là giá trị ban đầu Phép lặp diễn ra cho đến khi f d( ) i 

Giá trị ban đầu cho d 1 là d 0 + , cho d 2 là d 1 + , , ở đây  là một giá

trị nhỏ Giá trị gốc của f(d i ) có thể tính theo dùng phương pháp nửa lặp

(bisection) Ưu điểm của phương pháp Newton-Raphson là khả năng hội

tụ nhanh Nhược điểm là đạo hàm của một hàm thường có giá trị rất nhỏ

và dễ dẫn đến giá trị zero gây nên sự không ổn định của các số

Các chi tiết cho việc thay đổi r 0 Giá trị r 0 có thể thay đổi lại nếu chúng

ta nhận thấy rằng giá trị gốc của hàm:

Giá trị gốc này có thể rút ra dùng các giả thiết của Newton-Raphson theo:

g r

l l

0 1 0

0 0

  ( )

( )

Đạo hàm của g(r 0 ) có thể rất khó khăn cho việc phân tích Trong

trường hợp này cần có một công cụ tính toán khác Chúng ta có thể thay thế đạo hàm bằng một giá trị hằng số có cùng dấu như biểu thức trong dấu ngoặc (xem hình 13.8) Trong trường hợp này thì tích phân lâu hội tụ hơn

Tiếp theo là một chương trình cho tính các mức lượng tử hoá theo phương pháp Lloyd-Max Tích phân được đưa ra dùng phương pháp tích phân Romberg bởi vì nó chính xác hơn phương pháp tích phân Simpson Chương trình cho phép bạn thiết kế lượng tử hoá đồng đều, Gauss hoặc là Laplace

2

2 2

2

1 )



y

e y

Trang 8

Laplace p y( )  e y

2

 2

Đồng dạng:

0

1

|<=

y

| 1 ) (

lại còn hợp trường các

y p

Chương trình này có thể thay kiểm tra trên cả ba loại phân bố (với  = 1) với 6 bit cụ thể là 64 mức lượng tử hoá Bạn cần chú ý khi bạn chạy chương trình này bạn cần cho số của lựa chọn Lựa chọn đầu tiên là số bit bạn muốn xây dựng cho mức lượng tử, lựa chọn thứ hai là lựa chọn về các mức phân bố (phân bố Gauss, phân bố đồng đều, hoặc phân bố Laplace), và thứ ba cũng là lựa chọn cuối cùng là lựa chon trong khi tính

biểu thức trong ngoặc của g(r 0 ) Lựa chọn của g(r 0 ) có thể là lựa chọn cho

một số, một giá trị hoặc là một giá trị tăng dần Lý do của sự lựa chọn này là kết quả của phương pháp tính toán có thể là một số không thể tính

được, ví dụ khi ta chia cho một số quá nhỏ Qua kinh nghiệm tôi nhận thấy rằng phân bố Gauss và phân bố đồng đều thường cho kết quả tính toán rất tốt Còn cho phân bố Laplace, khi dùng tăng giá trị của biểu thức trong ngoặc sẽ không gặp một khó khăn nào việc tạo mã 6 bit

Chương trình 13.9 MAXQ1.C Chương trình cho tính các mức lượng tử Lloyd-Max

/*Program 13.9 "MAXQI.C" Program for the Lloyd-Max quantizer.*/

/* Program for designing the Lloyd-Max quantizer for Gauss, uniform or Laplace distribution.*/

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#include <alloc.h>

#include <conio.h>

double decision_level(double , double);

double f1(double);

double f2(double);

double p(double);

Trang 9

double Romberg(double, double, double

(*)(double));

char ch;

void main()

{

double *r,*d,r1,delta,alpha;

int i,m,N,k,xt,yt;

double der,rt,deltal, delta2;

char ch1,file_name[16];

FILE *fptr;

clrscr();

printf("Enter number of bits - >");

scanf("%d",&m);

N=1<<m;

r=(double *)malloc((N+1)*sizeof(double));

d=(double *)malloc((N+1)*sizeof(double));

printf("Enter choice of distribution:");

printf("\n 1 Gauss.");

printf("\n 2 Uniform.");

printf("\n 3 Laplace >(1,2 or 3): ");

while(((ch=getch())!='1')&&(ch!='2')&&(ch!='3')); putch(ch);

switch(ch)

{

case '1':

r[0]=-5.0; d[0]=-20.0;

break;

case '2':

r[0]=-0.98; d[0]=-1.0;

break;

case '3':

r[0]=-6.0; d[0]=-100.0;

if(m==6) r[0]=-8.0;

}

printf("\n\n The program uses Newton-Raphson's method");

printf("\n to compute the proper value of r[01 You have");

Trang 10

printf("\n a choice between using calculated values, a");

printf("\n fixed value or decreasing values for the ");

printf("\n derivatives at every update or

calculated ");

printf("\n values Always pick the first choice unless ");

printf("\n you encounter numerical problems."); xt=wherex();

yt=wherey();

gotoxy(1,21);

printf("Recommendations: Guassian or Uniform select I or 2.\n");

printf(" Laplace select 3."); gotoxy(xt,yt);

printf("\n Enter choice:");

error function.");

printf("\n 2 Fixed value.");

printf("\n 3 Decreasing derivative. >"); while(((ch1=getch())!='1')&&(ch1!='2')&&(ch1!='3' ));

putch(ch1);

gotoxy(1,21);

delline();

delline();

delta=20.0;

k=0;

xt=wherex(); yt=wherey();

gotoxy(70,25);

textattr(WHITE+(GREEN<<4)+BLINK);

cputs("WAIT");

while(fabs(delta)>=1.e-7)

{

k++;

if(k>=1000) break;

/* Computing the derivative of the function:

f(r[0])=r[N-1]-r1, numerically */

switch(ch1)

{

Trang 11

case '1':

rt=r[0]; r[0]=r[0]+0.001;

for(i=1;i<N;i++)

{

d[i]=decision_level(d[i-1],r[i-1]);

r[i]=2.0*d[i]-r[i-1];

}

r1=Romberg(d[N-1],-d[0],f1)/Romberg(d[N-1],-d[0],f2);

deltal=r[N-1]-r1;

r[0]=rt; r[0]=r[0]-0.001;

for(i=1;i<N;i++)

{

d[i]=decision_level(d[i-1],r[i-1]);

r[i]=2.0*d[i]-r[i-1];

}

r1=Romberg(d[N-1],-d[0],f1)/Romberg(d[N-1],-d[0],f2);

delta2=r[N-1]-r1;

r[0]=rt;

der=(deltal-delta2)/0.002;

break;

case '2':

der=5.0;

if(m==6) der=10.0;

break;

case '3':

if(k==1) der=5.0;

else if((k%5)==0) der/=2.0;

break;

}

/*Computing the values of dEil and r[i] */

for(i=1;i<N;i++)

{

d[i]=decision_level(d[i-1],r[i-1]);

r[i]=2.0*d[i]-r[i-1];

}

r1=Romberg(d[N-1],-d[0],f1)/Romberg(d[N-1],-d[0],f2);

delta=(r[N-1]-r1);

Trang 12

gotoxy(1,18);

printf("\n %d derivative=%f error=%f ",

k,der,delta);

if(fabs(delta)>=500.0)

{

printf("\n A numerical problem was

encountered.");

printf("\n Restart problem with a different choice.");

exit(1);

}

r[0]-delta/der;

}

gotoxy(70,25);

textattr(WHITE+(BLACK<<4));

cputs(" ");

gotoxy(xt,yt+2);

switch(ch)

{

case '1':

case '3':

printf("\n\n -%c %9.6f ",(char)236,r[0]); break;

case '2':

printf("\n\n %9.6f %9.6f ",d[0],r[0]);

}

for(i=1;i<N;i++)

printf("\n %9.6f %9.6f ",d[i],r[i]);

switch(ch)

{

case '1':

case '3':

printf("\n +%c",(char)236);

break;

case '2':

printf("\n %9.6f ",-d[0]);

}

printf("\nEnter file name for storing

quantizer >");

scanf("%s",file_name);

fptr=fopen(file_name,"w");

Ngày đăng: 29/07/2014, 04:20

HÌNH ẢNH LIÊN QUAN

Hình 13.14 Lượng tử hoá. - Nén Ảnh part 6 docx
Hình 13.14 Lượng tử hoá (Trang 2)
Hình 13.16 Các mức  lấy mẫu và khôi phục. - Nén Ảnh part 6 docx
Hình 13.16 Các mức lấy mẫu và khôi phục (Trang 4)
Hình 13.18 Phương pháp Newton-Raphson cho tính các biểu thức trong - Nén Ảnh part 6 docx
Hình 13.18 Phương pháp Newton-Raphson cho tính các biểu thức trong (Trang 5)

TỪ KHÓA LIÊN QUAN