Máy ảnh kỹ thuật số đơn giảnYÊU CẦU CHUNG • Chụp ảnh • Lưu trễ ảnh dưới dạng số Không sử dụng film Lưu nhiều ảnh trên máy ảnh o Số lượng phụ thuộc vào dung lượng bộ nhớ và số bit sử dụng
Trang 1TỔNG QUAN
1 Giới thiệu về máy ảnh kỹ thuật số đơn
giản
2 Quan điểm của nhà thiết kế
3 Yêu cầu và thông số kỹ thuật
4 Thiết kế và triển khai
Thiết kế máy ảnh kỹ thuật số
Trang 2• Thiết kế một máy ảnh kỹ thuật số
Bộ xử lý đa năng vs bộ xử lý đơn chức năng
Phân tách chức năng giữa các loại bộ xử lý khác
nhau
Trang 3Máy ảnh kỹ thuật số đơn giản
YÊU CẦU CHUNG
• Chụp ảnh
• Lưu trễ ảnh dưới dạng số
Không sử dụng film
Lưu nhiều ảnh trên máy ảnh
o Số lượng phụ thuộc vào dung lượng bộ nhớ và số bit sử dụng cho mỗi ảnh
• TẢI ẢNH LÊN HỆ THỐNG MÁY TÍNH (PC)
CHỈ KHẢ THI GẦN ĐÂY
• Hệ thống trên một chip (SOC): nhiều bộ xử lý và bộ nhớ trên một IC
• Bộ nhớ flash dung lượng cao
• Mô tả đơn giản: Máy ảnh kỹ thuật số thực có nhiều tính hơn
Ảnh có thể có kích thước khác nhau, xóa ảnh, kéo dãn số học, phóng to/thu nhỏ, vv.
Trang 4Máy ảnh kỹ thuật số đơn giản
• Đơn chức năng – luôn là máy ảnh kỹ thuật số
• Bị ràng buộc chặt chẽ Chi phí thấp, công suất thấp, nhỏ, nhanh
• Phản ứng nhanh theo thời gian thực – Chỉ trong phạm vi nhỏ
Trang 6Thách thức thiết kế
Số liệu thiết kế chung
• Chi phí đơn vị: Chi phí để sản xuất mỗi bản sao của hệ thống, không bao gồm chi phí NRE
chỉ một lần
• Kích thước: không gian vật lý cần thiết cho hệ thống
• Hiệu suất: thời gian thực thi hoặc thông lượng của hệ thống
• Công suất: lượng điêu tiêu thụ của hệ thống
• Tính linh hoạt: khả năng thay đổi chức năng của hệ thống
mà không gây chi phí NRE nặng nề
Trang 7Thách thức thiết kế
Số liệu thiết kế chung
• Thời gian tới nguyên mẫu: thời gian cần thiết để xây
dựng phiên bản hoạt động của hệ thống
• Thời gian đưa ra thị trường: thời gian cần thiết để phát triển hệ thống đến mức có thể phát hành và bán cho
Trang 8Số liệu thiết kế
• Cần có chuyên môn về cả phần cứng và phần mềm để tối ưu hóa các chỉ số thiết kế
Không chỉ là 1 chuyên gia phần cứnghoặc phần mềm nhưu thường thấy
1 nhà thiết kế phải thoải mái với cáccông nghệ khác nhau để có thể lựachọn công nghệ tốt nhất cho 1 ứngdụng cụ thể và các rang buộc liên quan
Phần cứng Phần mềm
Kích cỡ Hiệu suất
bộ điều khiển DMA
bộ điều khiển bộ nhớ Giao diện xe buýt ISA UART màn hình LCD
Trang 9Thời gian đưa ra thị trường
• Thời gian đưa ra thị trường trung bình hạn chế là
1 số liệu thiết kế đòi hỏi khắt khe
• Thời gian cần thiết để phát triển sản phẩm đến mức có thể bán cho khách hàng
• Cửa sổ thị trường
Khoảng thời gian mà cácsản phẩm sẽ có doanh thucao nhất
Trang 10Tổn thất do gia nhập thị trường chậm trễ
• Mô hình doanh thu đơn giản hóa
Tuổi thọ sản phẩm = 2W, Đỉnh tại WThời gian gia nhập thị trường xácđịnh 1 tam giác, đại diện cho thâmnhập thị trường
Diện tích tam giác bằng doanh thu
Trang 11Tổn thất do gia nhập thị trường chậm trễ
• Diện tích = 1/2 * đế * cao
Đúng giờ = 1/2 * 2W * WTrì hoãn = 1/2 * (W-D+W)*(W-D)
• Tỉ lệ thất thoát doanh thu
• Ví dụ
On-time
entry
Doanh thu cao nhất
Doanh thu cao nhất từ mục nhập bị trì hoãn Thị trường tăng
Trang 12NRE và số liệu chi phí đơn vị
Chi phí:
Chi phí đơn vị: Chi phí bằng tiền để sản xuất mỗi bản sao của hệ
thống, không bao gồm chi phí NRE
Chi phí NRE (Chi phí kỹ thuật không định kỳ): Chi phí thiết kế hệ thống
một lần duy nhất
Tổng chi phí = Chi phí NRE + Chi phí đơn vị * số đơn vị
Chi phí mỗi sản phẩm= tổng chi phí / số đơn vị
= (Chi phí NRE / số đơn vị) + Chi phí đơn vị
Chi phí mỗi sản phẩm= Tổng chi phí /Số đơn vị
= (Chi phí NRE/Số đơn vị) + Chi phí đơn vị
Ví dụ:
– NRE=$2000, đơn giá 1 sản phẩm=$100
– Với 10 sản phẩm
– Tổng chi phí = $2000 + 10*$100 = $3000 – Chi phí trên mỗi sản phẩm = $2000/10 + $100 = $300
Phân bổ chi phí NRE trên các đơn vị sản 12
Trang 13NRE và số liệu chi phí đơn vị
• So sánh các công nghệ theo chi phí—tốt nhất phụ thuộc vào số lượng
Công nghệ A: NRE=$2,000, đơn vị=$100Công nghệ B: NRE=$30,000, đơn vị=$30Công nghệ C: NRE=$100,000, đơn vị=$2
Trang 14Hiệu suất: Một thước đo thiết kế
• Đo lường thông dụng của hệ thống, nhưng thường bị lạm dụng
Tần số xung, số lệnh trên giây - không phải là các đo lường tốt
Ví dụ về máy ảnh kỹ thuật số - người dùng quan tâm đến tốc độ xử lý ảnh nhanh như thế nào, không phải tần số xung hay số lệnh trên giây
• Độ trễ (thời gian phản hồi)
Thời gian giữa bắt đầu và kết thúc nhiệm vụ
Ví dụ, Camera A và B xử lý hình ảnh trong 0,25 giây
• Thực hiện tác vụ trên giây
Tác vụ trên giây, ví dụ Camera A xử lý 4 ảnh mỗi giây
Thực hiện tác vụ trên giây có thể nhanh hơn thời gian trễ vì sự đồng thời, ví dụ Camera B có thể xử lý 8 ảnh mỗi giây (bằng cách chụp ảnh mới trong khi ảnh trước đó đang được lưu trữ).
• Tốc độ tăng nhanh của B so với A = hiệu suất của B / hiệu suất của A
Tốc độ tăng thực hiện tác vụ trên giây = 8/4 = 2
Trang 15Quan điểm của nhà thiết kế máy ảnh kỹ thuật số
Trang 16được chuyển đổi thành
giá trị n bit trong đó 0
biểu thị không có phơi
phủ bởi một dải sơn
màu đen Cường độ ánh
sáng của các pixel này
Mạch điện tử, khi được lệnh, sẽ phóng điện các ô, kích hoạt màn trập cơ điện, sau đó đọc giá trị điện tích n-bit của mỗi ô Các giá trị này có thể được bấm giờ ra khỏi CCD bằng logic mở rộng thông qua giao diện bus song song.
Lens area
Pixel columns
Covered columns
Electronic circuitry
mechanical shutter
Trang 17Sai số không điều chỉnh
• Lỗi sản xuất khiến các ô đo cường độ sáng cao hơn hoặc thấp
hơn một chút so với cường độ ánh sáng thực tế
• Lỗi thường giống nhau giữa các cột nhưng khác nhau giữa các
hàng
• Lỗi thường giống nhau giữa các cột nhưng khác nhau giữa các
hàng lỗi sai số không điều chỉnh
Việc đọc khác 0 trong các ô bị chặn là sai số không điều chỉnh
Mỗi hàng được sửa bằng cách trừ đi lỗi trung bình được tìm
thấy trong các ô bị chặn cho hàng đó
Covered cells
Before zero-bias adjustment After zero-bias adjustment
-13 -11 -9 0 -7 -1 -4 -5
Zero-bias adjustment
Trang 18• Lưu trữ nhiều hình ảnh hơn
• Truyền hình ảnh tới PC trong thời gian ngắn hơn
• JPEG (Nhóm chuyên gia chụp ảnh chung)
Định dạng tiêu chuẩn phổ biến để thể hiện hình ảnh kỹ thuật số
được nén
Cung cấp một số chế độ hoạt động khác nhau
Chế độ được sử dụng trong chương này cung cấp tỷ lệ nén cao bằng cách sử dụng DCT (biến đổi cosin rời rạc)
Dữ liệu ảnh được chia thành các khối 8 x 8
Thực hiện 3 bước trên mỗi khối
DCT, lượng tử hóa and Huffman encoding
Trang 19bước DCT
• Biến đổi khối 8 x 8 ban đầu thành tần số cosin lãnh địa
Giá trị góc trên bên trái thể hiện nhiều hơn bản chất của hình ảnhGiá trị góc dưới bên phải thể hiện chi tiết tốt hơn o Có thể giảm độ chính xác của các giá trị này và giữ lại chất lượng hình ảnh hợp lý
• Công thức FDCT (Chuyển tiếp DCT)
C(h) = if (h == 0) then 1/sqrt(2) else 1.0
Chức năng phụ dùng trong chức năng chính F(u,v)
F(u,v) = ¼ C(u) C(v) Σ x=0 7 Σ y=0 7 D xy cos(π(2x + 1)u/16) cos(π(2y + 1)v/16)
Cung cấp pixel được mã hóa ở hàng u, cột v Dxy là giá trị pixel gốc ở hàng x, cột y
• IDCT (Nghịch đảo DCT)
Đảo ngược quy trình để có được khối ban đầu (không cần thiết
cho thiết kế này)
Trang 20bước lượng tử hóa
• Đạt được tỷ lệ nén cao bằng cách giảm hình
ảnh chất lượng
Giảm độ chính xác bit của dữ liệu được mã hóa
o Cần ít bit hơn để mã hóa
o Một cách là chia tất cả các giá trị cho hệ số 2
Dịch chuyển sang phải đơn giản có thể thực hiện điều này
Dequantization sẽ đảo ngược quá trình giải nén
0 -8 -2 -2 5 -3 -2 1
5 -1 -1 -1 3 -4 -3 2 -2 -1 3 -1 0 0 2 -3 -1 -2 -1 -2 -1 0 1 -1
Sau khi được giải mã bằng
DCT
Sau khi lượng
tử hóa Divide each cell’s
value by 8
Trang 21Mã hóa Huffman
• Sắp xếp theo thứ tự khối pixel 8 x 8
Các giá trị được chuyển đổi thành một danh sách duy nhất bằng cách sử dụng mẫu hình zigzag
• Thực hiện mã hóa Huffman
Các pixel xuất hiện thường xuyên hơn được gán mã nhị phân ngắn
Mã nhị phân dài hơn dành cho các pixel ít xuất hiện hơn
• Mỗi pixel trong danh sách nối tiếp được chuyển đổi thành các giá trị được mã
hóa Huffman
Danh sách ngắn hơn nhiều, do đó nén
Trang 22Ví dụ mã hóa Huffman
Tần số pixel ở bên trái
• Giá trị pixel –1 xảy ra 15 lần
• Giá trị pixel 14 xảy ra 1 lần
Xây dựng cây Huffman từ dưới lên
• Tạo một nút lá cho mỗi pixel giá trị
và gán tần số làm giá trị của nút
• Tạo một nút bên trong bằng cách nối
hai nút bất kỳ có tổng bằng một giá trị
nhỏ nhất
• Lặp lại cho đến khi hoàn thành cây nhị
phân Duyệt cây từ gốc đến lá
Để lấy mã nhị phân cho
pixel của lá
• Nối 0 cho duyệt trái, 1 cho duyệt phải
Mã hóa Huffman có thể đảo ngược
• Không mã nào là tiền tố của mã khác
4
5
1 1 5
1 4
6
1 7
8
1 8
1
-15
29
3 5
-1 s15
x
0 8x -2 6x
1 5x
2 5x
3 5x
5 5x -3 4x -5 3x -10 2x
144 1x -9 1x -8 1x -4 1x
Trang 23lưu trữ
• Ghi lại địa chỉ bắt đầu và kích thước hình ảnh
Có thể sử dụng cấu trúc danh sách liên kết
• Một cách khả thi để lưu trữ hình ảnh số lượng hình
ảnh được lưu trữ là N
Dành bộ nhớ cho N địa chỉ và N biến kích thước hình ảnh
Giữ bộ đếm cho vị trí của địa chỉ khả dụng tiếp theo
Khởi tạo địa chỉ và biến kích thước hình ảnh thành 0
Đặt địa chỉ bộ nhớ chung thành N x 4
o Giả sử biến kích thước ảnh chiếm N x 4 byte
Ảnh đầu tiên được lưu trữ bắt đầu từ địa chỉ N x 4
Địa chỉ bộ nhớ chung được cập nhật thành N x 4 + (kích
thước ảnh nén)
• Yêu cầu bộ nhớ dựa trên N, kích thước hình ảnh và
tỷ lệ nén trung bình
Trang 24Tải lên hệ thống máy tính
Khi được kết nối với Hệ thống máy tính và
nhận được lệnh tải lên
• Đọc hình ảnh từ bộ nhớ
• Truyền nối tiếp bằng UART (ví
dụ: qua cổng USB)
• Trong khi truyền
Đặt lại con trỏ, biến kích thước hình ảnh
và con trỏ bộ nhớ chung cho phù hợp
Trang 25Yêu cầu Thông số kỹ thuật
Yêu cầu của hệ thống – hệ thống nên làm gì
• Yêu cầu phi chức năng
Các ràng buộc về số liệu thiết kế (ví dụ: “nên sử dụng 0,001 watt trởxuống”)
• Yêu cầu chức năng
Hành vi của hệ thống (ví dụ: “đầu ra X phải là đầu vào Y nhân 2”)
• Thông số kỹ thuật ban đầu có thể rất chung chung và đến từ bộ
phận tiếp thị
Ví dụ: Một tài liệu ngắn mô tả nhu cầu thị trường cho một máy ảnh kỹ
thuật số cấp thấp:
Chụp và lưu trữ ít nhất 50 hình ảnh có độ phân giải thấp và tải lên máy tính.
Chi phí khoảng 100 đô la với một IC kích thước trung bình duy nhất có giá
dưới 25 đô la
Có thời lượng pin dài nhất có thể
Doanh số dự kiến là 200.000 nếu gia nhập thị trường < 6 tháng
100.000 nếu từ 6 đến 12 tháng
doanh số bán hàng không đáng kể sau 12 tháng
Trang 26Những yêu cầu phi lý
Thiết kế các số liệu quan trọng dựa trên đặc
điểm kỹ thuật ban đầu
•
•
•
•
Hiệu suất: thời gian cần thiết để xử lý hình ảnh
Kích thước: số lượng cổng logic (cổng NAND 2 đầu vào) trong
IC
Công suất: đo lượng điện tiêu thụ trung bình trong khi xử lý
Năng lượng: tuổi thọ pin (công suất x thời gian)
Số liệu bị ràng buộc
• Giá trị phải ở dưới (đôi khi ở trên) ngưỡng nhất định
Số liệu tối ưu hóa
• Cải thiện càng nhiều càng tốt để cải thiện sản phẩm
Số liệu có thể vừa bị hạn chế vừa tối ưu hóa
Trang 27Những yêu cầu phi lý
Kích cỡPhải sử dụng IC phù hợp với camera có kích thước hợp lý
Số liệu hạn chế và tối ưu hóa: 200K cổng, nhưng thấp hơn thì rẻ
Giảm công suất hoặc thời gian làm giảm năng lượng
Số liệu được tối ưu hóa: muốn pin hoạt động càng lâu càng tốt
Trang 28Thông số kỹ thuật chức năng phi chính thức
• Sơ đồ luồng giúp phân tách
chức năng thành các chức
năng đơn giản hơn
• Chi tiết của mỗi chức năng có
thể được mô tả bằng tiếng Anh
Đã thực hiện trong chương trình trước đó
• Hình ảnh chất lượng thấp có
độ phân giải là 64x64
• Ánh xạ các chức năng vào một
loại bộ vi xử lý cụ thể chưa được
thực hiện ở giai đoạn này
Đầu ra nối tiếp vd:.
011010
Đầu vào CCD
Điều chỉnh độ lệch bằng không DCT
Lượng tử hóa
Lưu trữ trong
bộ nhớ
Có hơn 8x8 khối
?
Transmit serially
có
không Hoàn
thành
?
Trang 29Thông số ký thuật chức năng được hiệu chỉnh/hoàn thiện
• Tinh chỉnh thông số kỹ thuật phi chính
nhiều thời gian tính toán
• Có thể thu được đầu ra mẫu được
sử dụng để xác minh tính chính xác
của triển khai cuối cùng
image file
10101101 01101010 10010101 101
CODEC C
CCDPP
C
Mô hình thực thi của máy ảnh kỹthuật số
Trang 30static unsigned rowIndex,
void CcdInitialize(const char *imageFileName) { imageFileHandle = fopen(imageFileName, "r"); rowIndex = -1;
colIndex = -1;
} colIndex;
rewind(imageFileHandle);
for(rowIndex=0; rowIndex<SZ_ROW; rowIndex++) { for(colIndex=0; colIndex<SZ_COL; colIndex++) { if( fscanf(imageFileHandle, "%i", &pixel)
== 1 ) { buffer[rowIndex][colIndex] = (char)pixel; }
} } rowIndex = 0;
colIndex = 0;
}
Trang 31• Thực hiện điều chỉnh không có sự
lệch sau mỗi hàng được đọc vào
#define SZ_ROW
#define SZ_COL
64 64 static char
buffer[SZ_ROW][SZ_COL];
static unsigned rowIndex, colIndex;
void CcdppInitialize() { rowIndex = -1;
colIndex = -1;
} void CcdppCapture(void) {
char bias;
CcdCapture();
for(rowIndex=0; rowIndex<SZ_ROW; rowIndex++) {
for(colIndex=0; colIndex<SZ_COL; colIndex++) {
buffer[rowIndex][colIndex] = CcdPopPixel();
}
bias = (CcdPopPixel() + CcdPopPixel()) / 2;
for(colIndex=0; colIndex<SZ_COL; colIndex++) {
pixel = buffer[rowIndex][colIndex];
if( ++colIndex == SZ_COL ) { colIndex = 0;
if( ++rowIndex == SZ_ROW ) {
colIndex = -1;
rowIndex = -1;
} } return pixel;
}
Trang 32static FILE *outputFileHandle;
void UartInitialize(const char *outputFileName) { outputFileHandle = fopen(outputFileName, "w");
}
void UartSend(char d) { fprintf(outputFileHandle, "%i\n", (int)d);
}
Trang 33Mô-đun CODEC
• Mô hình mã hóa FDCT
• ibuffer chứa khối gốc 8 x 8 ban đầu
• obuffer chứa khối mã hóa 8 x 8
• Hàm CodecPushPixel được gọi
64 lần để điền khối gốc vào ibuffer
• Hàm CodecDoFdct được
gọi một lần để biến đổi
khối 8 x 8
Được giải thích trong slide kế tiếp
• Hàm CodecPopPixel được gọi
64 lần để lấy khối mã hóa từ
ibuffer[idx / 8][idx % 8] = p;
idx++;
} void CodecDoFdct(void) { int x, y;
for(x=0; x<8; x++) { for(y=0; y<8; y++) obuffer[x][y] = FDCT(x, y, ibuffer);
} idx = 0;
}
short CodecPopPixel(void) { short p;
if( idx == 64 ) idx = 0;
p = obuffer[idx / 8][idx % 8];
idx++;
return p;
}
Trang 34Thực hiện công thức FDCT
C(h) = if (h == 0) then 1/sqrt(2) else 1.0
F(u,v) = ¼ C(u) C(v) Σ x=0 7 Σ y=0 7 D xy cos(π(2x + 1)u/16) cos(π(2y + 1)v/16)
Chỉ có 64 giá trị đầu vào có thể đưa vào hàm COS, vì vậy bảng có thể được sử dụng để
tiết kiệm thời gian xử lý
Giá trị dấu phẩy động được nhân với 32.678 và làm tròn đến số nguyên gần nhất 32,678 được chọn để lưu trữ mỗi giá trị trong 2 byte của bộ nhớ
Đại diện cho dấu chấm động cố định được giải thích thêm sau FDCT được triển khai bằng cách xử lý
vòng lặp bên trong của tổng, cài đặt tổng bên ngoài dưới dạng hai vòng lặp liên tiếp
static short ONE_OVER_SQRT_TWO = 23170;
static double COS(int xy, int uv) {
short COS_TABLE[8][8] =
32138, 30273, 27245,
{
23170, 18204, 12539, 6392 }, { 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204 }, { 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245 }, { 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138 }, { 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138 }, { 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245 }, { 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204 }, { 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392 } };
static int FDCT(int u, int v, short img[8][8]) { double s[8], r = 0; int x;
for(x=0; x<8; x++) { s[x] = img[x][0] * COS(0, v) + img[x][1] * COS(1, v) + img[x][2] * COS(2, v) + img[x][3] * COS(3, v) + img[x][4] * COS(4, v) + img[x][5] * COS(5, v) + img[x][6] * COS(6, v) + img[x][7] * COS(7, v); }
for(x=0; x<8; x++) r += s[x] * COS(x, u);
return (short)(r * 25 * C(u) * C(v));
}