Chất lượng camera của điện thoại di động đã được cải thiện rất nhiều và có khả năng thay thế máy ảnh kỹ thuật số thông thường. Tuy nhiên, trên thực tế, camera điện thoại di động chỉ đáp ứng được một số nhu cầu cơ bản. Trong trường hợp cụ thể của ứng dụng này (ứng dụng tra từ điển cần chụp những bức ảnh trên giấy ở khoảng cách gần vì cỡ chữ trên giấy là khá nhỏ), chất lượng camera của đa phần các điện thoại di động trên thị trường chưa đáp ứng được. Vì vậy, có thể nói tiền xử lý ảnh là một trong những công đoạn rất quan trọng góp phần làm nên sự
thành công của ứng dụng tra từđiển bằng camera trên điện thoại di động.
Việc giải quyết bài toán tiền xử lý ảnh của ứng dụng này một cách tổng quát
đòi hỏi phải đầu tư rất nhiều thời gian và nguồn nhân lực vì trong khi sử dụng, người dùng có thể chụp ảnh ở trong rất nhiều môi trường, điều kiện ánh sáng khác nhau. Trong một ứng dụng nói chung và trong ứng dụng tra từ điển bằng camera trên điện thoại di động này nói riêng chỉ có thể giải quyết bài toán trong một trường hợp cụ thể.
Trong phạm vi của luận văn này, tôi chỉ thực hiện một số thao tác tiền xử lý
ảnh cơ bản đủ để đáp ứng yêu cầu của ứng dụng và cải thiện một phần chất lượng của ảnh chụp. Một số thao tác tiền xử lý ảnh được áp dụng: làm mờảnh (blur), làm nét ảnh (sharpen) và hiệu chỉnh độ tương phản. Mục đích của các thao tác tiền xử lý
ảnh này là làm cho phần văn bản trong ảnh được phân biệt rõ nét hơn so với phần nền, việc này giúp nâng cao độ chính xác của khối nhận dạng ký tự quang học.
Đối với những dòng điện thoại có hỗ trợ chức năng auto focus thì có thể bỏ
qua quá trình tiền xử lý ảnh này. Sau đó ảnh sẽ được lưu trữ để làm đầu vào cho khối nhận dạng ký tự quang học. Trong hình 2.4 là lưu đồ xử lý của khối tiền xử lý
Hình 2.4: Khối tiền xử lý ảnh Bắt đầu Ảnh đã được thu nhận Cắt ảnh Chuyển đổi định dạng ảnh Camera có hỗ trợ auto focus? Sai Làm mờ Làm nét Làm mờ Làm nét Điều chỉnh độ tương phản Kết thúc Đúng
2.2.1 Cắt ảnh
Tesseract được xây dựng để nhận dạng ký tự quang học trên những ảnh văn bản cỡ lớn được quét từ văn bản giấy và nó có thể chạy tốt trên máy tính vốn dồi dào tài nguyên (cụ thể là tốc độ CPU và dung lượng RAM). Tuy nhiên, việc này không thể thực hiện được trên môi trường ít tài nguyên như điện thoại di động. Vì vậy, luận văn tôi thực hiện giới hạn vùng ảnh chụp và cắt ảnh để giảm tải cho khối OCR, tức là chỉ cho phép người dùng chụp một phần của văn bản giấy theo một vùng đã được định sẵn.
Ngoài ra, ứng dụng còn yêu cầu người dùng chỉ định từ cần tra cứu và ứng dụng chỉ tra từđiển từ mà người dùng đã chỉ định dựa vào kỹ thuật phân tích thành phần liên thông trên ảnh chụp.
Hình 2.5 mô tả cách ứng dụng giới hạn vùng ảnh chụp và chỉ định từ cần tra. Hình chữ nhật màu đỏ sẽ là vùng giới hạn ảnh chụp và chữ thập màu đỏ sẽ chỉ định từ mà người dùng cần tra cứu. Ứng dụng sẽ tiến hành cắt ảnh theo hình chữ nhật màu đỏ.
Cắt ảnh là quá trình thực hiện sao chép các điểm ảnh trong vùng chữ nhật giới hạn sang một ảnh mới có kích thước đúng bằng kích thước hình chữ nhật giới hạn
đó.
Hệ điều hành Symbian có các API hỗ trợ cho người lập trình thực hiện việc này đó là lớp CimageProcessor và các hàm GetPixel(), SetPixel().
Hình 2.5: Giới hạn vùng ảnh chụp và chỉđịnh từ cần tra
void CropImageL(const TPoint pos, const TSize &aSize) {
iCropBitmap = new (ELeave) CFbsBitmap(); CleanupStack::PushL(iCropBitmap);
User::LeaveIfError(iCropBitmap->Create(aSize,iBitmap->DisplayMode())); CImageProcessor* processor;
processor = ImageProcessorUtility::NewImageProcessorL(*iCropBitmap,
aSize, iBitmap->DisplayMode(), ETrue); CleanupStack::PushL(processor);
processor->PrepareL(*iCropBitmap, TRect(aSize));
for(TInt yPos = pos.iY; yPos < pos.iY + aSize.iHeight; yPos++) for(TInt xPos = pos.iX; xPos < pos.iX + aSize.iWidth; xPos++)
{ TRgb pixel; TRgb pixel; iBitmap->GetPixel(pixel, TPoint(xPos,yPos)); processor->SetPixel(pixel); } processor->FlushPixels(); CleanupStack::PopAndDestroy(processor); CleanupStack::Pop(iCropBitmap); }
Trong hàm trên, pos là vị trí góc trái-trên của hình chữ nhật giới hạn vùng ảnh chụp, aSize là kích thước của hình chữ nhật đó. iBitmap là một biến kiểu
CFbsBitmap đang được dùng để lưu trữ ảnh đã được chụp. iCropBitmap là một biến kiểu CFbsBitmap dùng để lưu trữ kết quả của việc cắt ảnh.
iCropBitmap sẽ là đầu vào của bước kế tiếp, bước chuyển đổi định dạng ảnh.