Nén Ảnh part 1 pdf

12 137 0
Nén Ảnh part 1 pdf

Đ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

309 Chơng 13 Nén dữ liệu ảnh 13.1 Chỉ dẫn Nén ảnh là một kỹ thuật mã hoá hiệu suất cao ảnh số nhằm làm giảm số bit cần cho biểu diễn ảnh. Chức năng của kỹ thuật này là giảm độ lớn dữ liệu phải lu trữ cùng với thời gian truyền trong khi vẫn giữ nguyên chất lợng của ảnh. Để đánh giá sự cần thiết của nén ảnh, chúng ta xem xét về yêu cầu bộ nhớ và thời gian truyền khi dùng một modem 9600 baud (bit/s) cho các ảnh sau đây: Một ảnh 512 512 điểm, 8 bit cho một điểm, ảnh mức xám yêu cầu 2,097,152 bit cho lu giữ và mất 3.64 phút để truyền. Một ảnh màu RGB có cùng các bớc xử lý nh trờng hợp trên yêu cầu xấp xỉ 6 triệu bít cho lu trữ và mất gần 11 phút để truyền. Một phim âm bản có kích thớc 24 36 mm (35 mm) chia bằng các khoảng cách nhau 12 àm, vào khoảng 3000 2000 điểm, 8 bit cho một điểm, yêu cầu 48 triệu bit cho lu giữ ảnh và 83 phút để truyền. Một phim âm bản màu sẽ yêu cầu một số lớn gấp ba lần cho lu giữ và truyền. Rõ ràng, việc truyền và lu giữ các ảnh sẽ có nhiều vấn đề. Có rất nhiều ví dụ khác mà sẽ dễ dàng làm sáng tỏ vai trò của nén ảnh, và rất có nhiều nghiên cứu tập trung vào lĩnh vực này. Fax, một tài liệu đồ hoạ đợc truyền qua đờng dây điện thoại, nén dữ liệu ảnh y học, truyền hình là một vài trong số nhiều ứng dụng tiềm tàng của nén ảnh. Sự phát triển của kỹ thuật vi điện tử và sự phát triển của rất nhiều ứng dụng thơng mại dẫn dắt sự phát triển cho các tiêu chuẩn và phần cứng của bộ nén ảnh theo thời gian thực. Nén ảnh là đạt đợc bâừng cách loại bỏ các phần thừa trong ảnh. Các phần thừa này có thể ở trong miền không gian, miền phổ, hoặc là phần thừa trong thời gian. Phần thừa không gian là kết quả do mối quan hệ tơng quan giữa các điểm gần nhau. 310 Phần thừa phổ là kết quả do mối tơng quan giữa các mặt phẳng màu khác nhau. Phần thừa thời gian là kết quả mối tơng quan của các khung khác nhau một dãy các ảnh nh trong truyền hình . Trong chơng này tôi sẽ trình bày với các bạn một số thuật toán nén ảnh có kết quả tốt đợc thừa nhận rộng rãi. Chúng ta sẽ phát triển thuật toán thành mã chơng trình C, sau đó kiểm tra kết quả của các kỹ thuật này qua các ví dụ chạy thử. Bạn sẽ có nhiều kinh nghiệm bằng cách tự chạy các chơng trình này. 13.2 Mã thống kê Những ảnh mà chúng ta thu nhận đợc mã hoá và lu giữ dới dạng "mã tự nhiên". Một mức xám của giá trị đợc mã hoá bằng 8 bit nhị phân bằng nhau. Ví dụ một mức xám giá trị 6 đợc mã hoá là 0000 0110. Một sự sắp xếp mã hoá luân phiên nhau đợc dùng trong mã mức xám. Loại mã này có đặc tính là bất kỳ hai từ mã liền nhau nào cũng chỉ khác nhau một vị trí. Bảng 13.1 trình bày hai kiểu mã khác nhau cho một tín hiệu mẫu có giá trị vào khoảng từ 0 đến 7. Một kiểu cho ta thấy rằng tín hiệu không nhất thiết phải có giá trị thực sự từ 0 đến 7, nhng phải có 8 mức riêng biệt. Bảng 13.1 Các mã khoảng cách bằng nhau Vào Mã tự nhiên Mã mức xám 0 1 2 3 4 5 6 7 000 001 010 011 100 101 110 111 111 110 100 101 001 000 010 011 Những loại mã này thờng gọi là mã khoảng cách bằng nhau. Mã khoảng cách bằng nhau không đợc dùng trong trong thống kê dữ liệu. Sự thừa nhận này đợc tạo ra khi ta coi rằng tất cả các mức xám (hoặc giá trị tín hiệu chói) có cùng số lần xuất hiện trong ảnh. Nếu điều này không đúng, dạng mã này không phải tốt nhất. Nếu chúng ta phát triển một mã 311 mà một số ít bít hơn đợc kí hiệu cho các từ mã biểu diễn các mức xám có khả năng xuất hiện cao hơn, thì trung bình độ dài từ mã sẽ nhỏ nhất và loại mã mà chúng ta vừa phát triển là cơ bản cho mã phần thừa tối thiểu. Tất cả các loại mã này đợc biết với tên mã có độ dài thay đổi hoặc đôi khi gọi là mã entropy. Câu hỏi đặt ra cho chúng ta lúc này là : Chiều dài từ mã trung bình tối thiểu mà có thể dùng giải mã để sửa lại mã chính xác là gì? Làm cách nào chúng ta tạo ra mã này? Câu trả lời cho câu hỏi đầu tiên có thể tìm thấy trong lý thuyết thông tin. Nếu ta cho rằng một mức xám g của xác suất p(g) đợc cho bằng từ mã dài L(g) bit. Chiều dài từ mã trung bình, trong một ảnh mức xám 8 bit, đợc cho bởi 255 0 )()( gLgpL bit/ pixel (13.1) Một thừa nhận hợp lý nữa có thể suy ra là sự kiện có số lần xuất hiện ít, thì sẽ cung cấp nhiều thông tin hơn sự kiện số lần xuất hiện nhiều hơn. Sự thừa nhận này dẫn chúng ta đến mối quan hệ )(log 1 )( 2 gp gL (13.2) Cơ số 2 dùng khi L(g) đợc cho dới dạng đơn vị nhị phân hoặc bit. Chiều dài từ nhỏ nhất mà có thể đợc dùng cho bởi 255 0 2min )(log)( g gpgpL bít/pixel (13.3) Biểu thức này gọi là entropy của tín hiệu. Entropy thì không bao giờ âm vì p(g) nằm trong khoảng [0,1]. Đạo hàm của biểu thức entropy có thể tìm thấy trong các sách nói về tin học hoặc thông tin. Chú ý rằng cho một ảnh 256 mức xám mà tất cả các mức có khả năng xuất hiện bằng nhau khi dùng biểu thức (13.3) chúng ta có: 255 0 2min 8) 256 1 (log 256 1 L bit/pixel Điều này có nghĩa là một mã có độ dài bằng nhau có thể dùng trên một ảnh mà có hàm phân bố cờng độ sáng đồng đều. Câu trả lời cho câu hỏi thứ hai đề cập đến mã có phần thừa nhỏ nhất (mã tối u) đợc Huffman tìm ra. Loại mã này gọi là mã Huffman và đợc áp dụng rộng rãi trong các kỹ thuật mã hoá bằng phần cứng cũng 312 nh bằng phần mềm trong các ứng dụng thơng mại. Bây giờ chúng ta sẽ xem xét sơ đồ mã hoá Huffman. Thuật toán mã hoá Huffman tuân theo các giới hạn sau: 1. Không có hai thông báo nào có sự sắp xếp của từ mã giống nhau. 2. Từ mã của thông báo đợc mã hóa theo cách mà không cần một sự chỉ dẫn nào thêm để chỉ ra đâu là nơi bắt đầu và đâu là nơi kết thúc của từ mã. Hạn chế thứ hai chỉ ra rằng không có thông báo nào đợc mã hoá theo cách mà khi từ mã xuất hiện, bit nối bit, nh là một phần của từ mã lớn hơn. Ví dụ, 01, 102, và 202 là các từ mã hợp lệ. Một dãy của các từ mã xuất hiện có dạng 1111022020101111102 có thể tách ra thành 111-102- 202-01-01-111-102. Tất cả các vấn đề mà chúng ta cần quan tâm khi giải mã là bộ mã gốc. Nếu nh một bộ mã bao gồm 11, 111, 102, 02 thì khi một thông báo bắt đầu vói 11, ta sẽ không biết liệu đây là thông báo 11 hay đây là phần bắt đầu của thông báo 111. Nếu một thông báo 11102 xuất hiện thì ta sẽ không biết liệu đây là 111-02 hoặc là 11-102 đợc truyền đi. Mã Huffman đợc mã hoá theo hai hạn chế trên đây và gọi là mã có độ d thừa tối thiểu hay gọi là mã tối u. Phơng pháp mã hoá này theo hai bớc: bớc thu gọn và bớc mở rộng. Để xem xét phơng pháp mã hoá này ta coi rằng các thông báo để xây dựng từ mã đợc sắp xếp theo thứ tự xác suất xuất hiện giảm dần. p(0) p(1) p(2) p(N - 1) ở đây N là số của các thông báo. Nh tôi đã chỉ ra ban đầu, cho bộ mã hoá tối u thì độ dài của từ mã đợc xắp xếp theo thứ tự L(0) L(1) L(2) L(N - 1) Các bớc dới đây trình bày giải thuật mã hoá Huffman. Giải thuật này, cũng nh phần lớn các giải thuật khác trong cuốn sách này, đợc phát triển bởi chính tác giả. 13.2.1 Giải thuật thu gọn Các bớc của giải thuật thu gọn đợc trình bày tốt nhất theo các bớc sau đây: Đặt M = N và coi đây là một mảng tuyến tính có kích thớc N - 2. Cho i = 0 đến N - 3 lặp lại các bớc sau: { Cộng p(M) và p(M - 1). Thay p(M - 1) bằng kết quả thu đợc. Xác định vị trí, loc, trong M - 1 vị trí đầu tiên của mảng p trong đó p(M - 1) > p(loc). 313 Đặt temp = p(M - 1). Chuyển các giá trị từ p(loc) đến p(M - 2) xuống một vị trí. Đặt giá trị trung gian vào loc. Lu giá trị trung gian trong mảng tuyến tính v theo v(N - 2 - i) = loc Giảm M đi một giá trị. } Để hiểu giải thuật thu gọn ta xem xét ví dụ sau. Giả sử rằng khả năng xuất hiện của các thông tin là: p = {0.25, 0.25, 0.125, 0.125, 0.0625, 0.0625, 0.0625, 0.0625} Giải thuật thu gọn đợc trình bày ở trên, cho trờng hợp này, trong hình 13.1, từ đó chúng ta có thể viết: 5 6 3 4 1 2 v Hình 13.1 Giải thuật thu gọn. Mảng tuyến tính v đợc dùng để xây dựng mã hoá Huffman theo bớc mở rộng đợc trình bày ở dới đây. 13.3.2 Bớc mở rộng Bớc giải thuật này có thể trình bày theo các bớc sau: 0.0625 0.0625 0.0625 0.25 0.25 0.25 0.25 0.25 1 0.5 0.5 2 3 4 5 6 7 8 0.25 0.25 0.25 0.25 0.25 0.5 0.125 0.125 0.125 0.25 0.125 0.125 0.125 0.0625 0.125 0.0625 0.0625 0.125 0.125 0.125 0.125 0.25 0.25 0.25 0.25 314 1) Gán các giá trị ban đầu cho một mảng H theo: H H H H H N 0 1 0 0 0 1 2 3 . . ( ) ( ) ( ) . . . ( ) Chú ý là phần tử thứ hai bằng 1 còn các phần tử khác bằng 0. Véc tơ tuyến tính v = [v[1] v[2] v[3] v[N - 2]] T đợc tính trong bớc thu gọn. Chú ý là vị trí của các phần tử đợc cho bằng 1,2,3 2) Đặt M = 2 và i = 1. 3) Lu phần tử ở vị trí v[i] trong mảng H vào một biến trung gian temp. temp = H[v(i)] 4) Dịch chuyển các phần tử các phần tử ở vị trí dới H[v(i)] một vị trí lên phía trên. Chèn giá trị 0 vào vị trí cuối cùng. 5) Sao chép temp tới vị trí thứ M trong H. 6) Dịch trái H(M) một bít. 1 0 0 1 0 1 0 1 0 1 0 1 0 2 1 1 0 1 1 1 1 1 1 1 1 1 1 3 1 1 0 0 0 0 0 1 0 0 1 0 0 1 0 4 0 1 0 1 0 0 1 1 0 1 1 0 1 1 5 0 1 1 0 0 0 0 0 0 0 0 1 0 6 0 0 1 0 0 1 0 0 0 1 1 7 0 0 1 1 0 0 0 0 8 0 0 0 1 Hình 13.2 Giải thuật mở rộng. 7) H[M + 1] = H[M] + 1. 8) Tăng M và i lên một. 9) Nếu i (N - 2) quay lại bớc thứ ba. 315 Nếu không thì đã hoàn thành, và mã nằm trong bảng H. Các bớc trên giải thích qua hình 13.2 dùng ví dụ hình 13.1. Các bớc trên đợc lập ra bởi Huffman. Lu và Chen đã nhận ra rằng thuật toán của Huffman không phải lúc nào cũng tạo ra một mã có độ dài đơn diệu tăng dần qua ví dụ của họ dới đây: Xem xét khả năng xuất hiện thông tin dới đây: P 0 5 01 01 01 01 01 . . . . . . Theo giải thuật thu gọn ở trên chúng ta có v 2 2 3 2 và tạo bộ mã H 0 101 1000 1001 110 111 Bộ mã trên không thoả mãn điều kiện về chiều dài của từ mã đơn điệu tăng dần; tuy nhiên, bộ mã này có thể sử dụng nếu nó thoả mãn điều kiện có khả năng giải mã đợc. Lỗi này có thể sửa đợc bằng một thay đổi nhỏ theo Lu và Chen trong bớc thứ ba từ p(M - 1) > p(loc) thành p(M - 1) p(loc) Theo phơng pháp này cho ta kết quả 316 v 1 2 2 2 và tạo ra một bộ mã H 1 001 010 011 0000 0001 Chú ý là thuật toán Lu và Chen tạo ra bộ mã thì hoàn thiện hơn thuật toán mô tả ở trên. Chơng trình dới đây tạo ra bộ mã dùng các bớc thu gọn và mở rộng ở trên. Chơng trình này sử dụng thuật toán Lu và Chen mô tả ở trên. Chơng trình cũng tính trung bình độ dài từ. Chơng trình không dùng trên ảnh, mà chỉ minh hoạ các bớc thực hiện việc sinh mã Huffman. Chú ý điều kiện dùng trong bớc 3 của quá trình thu nhỏ đợc thay bằng điều kiện của Lu và Chen. Chơng trình 13.1 Chơng trình ví dụ sinh mã Huffman. /*Program 13.1 "HUFFMAN.C". Example program for generating the Huffman code.*/ /* Example program to demonstrate the algorithm for the generation procedure of the Huffman code. */ #include <stdio.h> #include <conio.h> /*float p[]={0.2, 0.18, 0.1, 0.1, 0.1, 0.06, 0.06, 0.04, 0.04, 0.04, 0.04, 0.03, 0.01}; int N=13;*/ float p[]={0.5,0.1,0.1,0.1,0.1,0.1}; int N=6; void main() 317 { int i,M,j,loc; unsigned char v[11],L[13],code[13]; unsigned char ctemp,Ltemp; float temp,sum,pt[13]; for(j=0;j<N;j++) pt[i]=p[j]; clrscr(); for(i=0;i<(N-2);i++) v[i]=0; /* Contraction. */ M=N; for(i=0;i<(N-2);i++) { p[M-2]=p[M-1]+p[M-2]; loc=M-2; for(j=0;j<(M-1);j++) { if(p[M-2]>=p[j]) { loc=j; break; } } temp=p[M-2]; for(j=M-2;j>=loc;j ) p[j]=p[j-1]; p[loc]=temp; M ; v[(N-3)-i]=loc; } printf("\n The v vector is given by:\n"); for(j=0; j<(N-2); j++) printf ("%d\n", v[j]+1); /*Expansion.*/ for(j=0; j<N; j++) { code[j]=0 ; L[j]=1; } printf("\n\n "); code[0]=0; 318 code[1]=1; M=1; for(i=0; i<(N-2);i++) { if(v[i]==M) { code[M+1]=(code[M]<<1)+1; code[M]=(code[M])<<1; L[M]++; L[M+1]=L[M]; } else { ctemp=code[v[i]]; Ltemp=L[v[i]]; for(j=v[i];j<M;j++) { code[j]=code[j+1]; L[j]=L[j+1]; } code[M]=ctemp; L[M]=Ltemp; code[M+1]=(code[M]<<1)+1; code[M]=code[M]<<1; L[M]++; L[M+1]=L[M]; } M++; } printf("Code words Length\n"); for(j=0;j<N;j++) printf(" %d %d\n",code[j],L[j]); sum=0.0; for(j=0;j<N;j++) sum+=pt[j]*(float)L[j]; printf("Lav.=%f",sum); getch(); } [...]... tính bởi công thức (13 .1) Chú ý rằng chương trình cũng tính độ dài các bit của mỗi mã và độ dài từ trung bình Độ dài sẽ mã cần thiết cho việc mã hoá và giải mã các tín hiệu Bài tâp 13 .1 1 Chạy chương trình 13 .1 dùng ví dụ cho trong tài liệu của Huffman: p = {0.2, 0 .18 , 0 .1, 0 .1, 0 .1, 0.06, 0.06, 0.04, 0.04, 0.04, 0.04, 0.03, 0. 01} 2 Đổi giả thiết: if (p[M - 1] p[j] thành if (p[M - 1] > p[j]) trong chương... mã Huffman được sinh ra theo giải thuật được mô tả trên Trong việc mã hoá ảnh số bạn cần nhớ rằng chương trình sẽ cần nhiều byte trên đĩa Khi viết một thủ tục giải mã ta cần chú ý đến giới hạn này 13 .2.3 Mã hoá ảnh số Trước khi mã hoá ta cần tạo ra hai bảng tra cứu: 1 Một bảng tra cứu (LUT) chứa quan hệ các giá trị mức xám trên ảnh vói bộ mã hoá Huffman Bảng LUT này có thể phát triển dùng quan hệ: table_code[gray[i]]... thông tin để thiết lập các bảng LUT, dùng cho việc giải mã ảnh Nó bao gồm các mức xám trên ảnh, dạng mã Huffman và chiều dài tương đương của chúng Chú ý rằng các từ mã được sắp xếp theo thứ tự giảm dần theo xác suất xuất hiện của chúng Chương trình C sau đây sẽ trình bày các bước trên Chương trình 13 .2 "HUCODING" Mã hoá Huffman ảnh số /*Program 13 .2 "HUCODING.C" Huffman coding of digital images.*/ /*... bảng tra cứu xác lập quan hệ giữa các mức xám trên ảnh vói chiều dài từ mã Huffman LUT có thể tạo ra theo mối quan hệ sau: 319 table_length [ gray[i]] = L[i] Mã hoá theo các bước sau: a Mở một file để chứa ảnh đã được mã hoá b Đặt Len = 0 và aux = 0 aux là một thanh ghi bốn byte để truyền mã Len chứa số các bít còn lại trong aux c Đọc giá trị điểm ảnh d Xác định mã Huffman của nó, code[i], và độ dài... các bít còn lại trong thanh ghi aux ra file đầu ra Để giải mã được ảnh chúng ta cần phải tạo thêm phần header của file Header của file bao gồm cả chiều dài thực sự của file tính theo bit Chú ý là chiều dài thực sự có thể lớn hơn hoặc bằng chiều dài thực sự của file Điều này bởi vì chúng ta chỉ có thể chứa dưới dạng đơn vị byte, còn file ảnh đã mã hoá phải có chiều dài không chia hết cho 8 Phần này chứa... Dùng ví dụ cho bởi Lu và Chen, chú ý sự khác nhau trong chiều dài từ mã vói hai điều kiện khác nhau Nhiệm vụ tiếp theo của chúng ta thật rõ ràng Chúng ta cần viết một chương trình C để mã hoá và giải mã ảnh số dùng lược đồ mã Huffman Chương trình sẽ bao gồm: tính toán khả năng xảy ra của mỗi mức xám và xắp xếp lại theo thứ tự giảm dần của khả năng có thể Tất nhiên, chương trình cũng bao gồm một vector . biệt. Bảng 13 .1 Các mã khoảng cách bằng nhau Vào Mã tự nhiên Mã mức xám 0 1 2 3 4 5 6 7 000 0 01 010 011 10 0 10 1 11 0 11 1 11 1 11 0 10 0 10 1 0 01 000 010 011 Những. 1 0 0 1 0 1 0 1 0 1 0 1 0 2 1 1 0 1 1 1 1 1 1 1 1 1 1 3 1 1 0 0 0 0 0 1 0 0 1 0 0 1 0 4 0 1 0 1 0 0 1 1 . của từ mã lớn hơn. Ví dụ, 01, 10 2, và 202 là các từ mã hợp lệ. Một dãy của các từ mã xuất hiện có dạng 11 110 2202 010 111 110 2 có thể tách ra thành 11 1 -10 2- 202- 01- 01- 111 -10 2. Tất cả các vấn đề mà

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

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan