Skip to content
Mì AI Mì AI Mì AI

Học AI theo cách Mì ăn liền!

Mì AI Mì AI Mì AI

Học AI theo cách Mì ăn liền!

  • Trang chủ
  • Kênh Youtube
  • Facebook Group
  • Nói về chủ tiệm Mì
  • Trang chủ
  • Kênh Youtube
  • Facebook Group
  • Nói về chủ tiệm Mì
Close

Search

  • Trang chủ
  • Kênh Youtube
  • Facebook Group
  • Nói về chủ tiệm Mì
Mì AI Mì AI Mì AI

Học AI theo cách Mì ăn liền!

Mì AI Mì AI Mì AI

Học AI theo cách Mì ăn liền!

  • Trang chủ
  • Kênh Youtube
  • Facebook Group
  • Nói về chủ tiệm Mì
  • Trang chủ
  • Kênh Youtube
  • Facebook Group
  • Nói về chủ tiệm Mì
Close

Search

  • Trang chủ
  • Kênh Youtube
  • Facebook Group
  • Nói về chủ tiệm Mì
Computer Vision

Chia sẻ kỹ thuật phát hiện và xử lý ảnh bị mờ khi xử lý video

By Chủ tiệm Mì
January 2, 2020 3 Min Read
0

Xin chào anh em Mì Ai và chúc mừng năm mới 2020. Chắc hẳn anh em làm xử lý ảnh sẽ thường xuyên phải làm việc với video. Thay vì xử lý 1 frame như khi làm việc với ảnh, anh em sẽ phải đọc lần lượt từng frame của video và đôi lúc anh em sẽ gặp tình trạng frame bị mờ. Khi frame bị mờ như vậy việc xử lý tiếp theo sẽ rất vất vả và nhiều khi không mạng lại kết quả mong muốn. Do đó, hôm nay mình sẽ chia sẻ cùng anh em một kỹ thuật phát hiện và xử lý ảnh bị mờ nhé.

Phần 1. Cách phát hiện frame bị mờ

Chưa xét đến video vội, chúng ta hãy cùng làm việc với bài toán đơn giản hơn là “Cho một ảnh đầu vào, phát hiện ảnh bị mờ hay không?”. Để làm được điều này chúng ta sử dụng một hàm đơn giản của OpenCV là

cv2.Laplacian(input_image, cv2.CV_64F).var()

Lý thuyết về hàm này thì anh em đọc tai Paper này nếu như muốn ăn thêm cơm nhé : tại đây. Còn mình chỉ hiểu nôm na là nó nhân cái ảnh của ta với cái ma trận này để đo độ focus của ảnh (Mì ăn liền style ah):

[0  1 0]
[1 -4 1]
[0  1 0]

Sau khi nhân xong sẽ trả ra cho anh em 1 con số và anh em chỉ cần định nghĩa cho mình 1 blur threshold, nếu như con số trả ra < threshold đó thì anh em kết luận là ảnh mờ và ngược lại.

Ví dụ bây giờ các bạn có thể clone git này về :

git clone https://github.com/thangnch/MiAI_Blur_Detection .

và chạy thử đoạn code trong file blur_detect.py xem nhé:

import cv2

# Duong dan den file anh
image_file= "test02.jpg"
# Dinh nghia blur threshold
blur_threshold=100

# Doc anh tu file
image = cv2.imread(image_file)
gray  = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

# Tinh toan muc do focus cua anh
focus_measure = cv2.Laplacian(gray, cv2.CV_64F).var()

if focus_measure < blur_threshold:
    text = "Blurry pix"
    cv2.putText(image, "{} - FM = {:.2f}".format(text, focus_measure), (30, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 3)

else:
    text = "Fine pix"
    cv2.putText(image, "{} - FM = {:.2f}".format(text, focus_measure), (30, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 3)

# Hien thi anh
cv2.imshow("Image", image)
key = cv2.waitKey(0)

Mình có chạy thử với 2 ảnh thì đã phát hiện khá chuẩn:

ảnh bị mờ
ảnh bị mờ

Sau khi nhận biết được ảnh nào mờ rồi thì anh em có thể áp dụng các biện pháp Sharpen như thông thường.

Phần 2 – Phát hiện và kỹ thuật xử lý frame bị mờ từ video

Như vậy chúng ta đã biết cách xác định frame ảnh có bị mờ hay không. Vậy chúng ta cần làm gì khi trích xuất frame từ video ra (để nhận diện Biển số xe chẳng hạn) mà bị mờ.

Kỹ thuật mình hay sử dụng là thay vì lấy 1 frame và xử lý ngay thì mình thường lấy khoảng 5 frames liên tiếp sau đó viết một hàm nhỏ để check xem trong 5 frame đó, đâu là ảnh ít mờ nhất và mình sẽ pick ảnh đó để xử lý tiếp.

Ví dụ đoạn code sau:

def get_best_images(input_frames):
     # Sap xep cac input_frames theo muc do Focus giam dan
     input_frames = sorted(input_frames, key=lambda img : cv2.Laplacian(img[0], cv2.CV_64F).var(), reverse=True)
     # Lay khung hinh co muc do focus tot nhat
     best_image = input_frames[:1]
     return best_image

Các bạn có thể thử và sẽ thấy chất lượng ảnh đầu ra từ video tốt hơn nhiều( ta có thể chọn được ảnh tốt nhất mà) và anh em cũng dễ dàng xử lý tiếp hơn rất nhiều. Sau khi nhận biết được ảnh nào mờ rồi thì anh em có thể áp dụng các biện pháp Sharpen như thông thường.

Mình xin tạm dừng bài này tại đây, hi vọng anh em đã có thêm 1 trick nữa để phục vụ quá trình học tập, nghiên cứu AI, ML,DL…

Chúc mừng năm mới!

Hãy join cùng cộng đồng Mì AI nhé!

Fanpage: http://facebook.com/miaiblog
Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup
Website: https://miai.vn/
Youtube: http://bit.ly/miaiyoutube

Thanks bài tham khảo về xử lý video của bác Tuan Long: tại đây và của Adrian Rosebrock tại đây.

Tags:

ảnh bị mờblur detectblur detectionblurry detectionnhận diện ảnh mờopencvphát hiện ảnh mờxử lý ảnh mờ
Author

Chủ tiệm Mì

Follow Me
Other Articles
Previous

Có ít dữ liệu, làm sao train model? – Chương 2. Data Augment/tăng cường dữ liệu cho Text

Next

Tracking/theo vết đối tượng trong ảnh – Chương 1. Thử thuật toán tracking bằng Open CV

No Comment! Be the first one.

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • Tìm hiểu và cài đặt OpenClaw – trợ lý ảo 24/7 thông minh đa chức năng – Mì Ai
  • Dùng thử Pika – robot học Tiếng Anh cho trẻ cực đỉnh – Mì AI
  • TopView.AI 4.0 – nền tảng tạo AI video cộng tác bá đạo – Mì AI
  • Storm MCP – giải pháp nhanh gọn nhẹ để có MCP Server trong 5 phút – Mì AI
  • VoxCPM thử voice cloning với checkpoint finetune Tiếng Việt – Mì AI

Recent Comments

  1. Chủ tiệm Mì on Thử xây dựng hệ thống Agentic AI với LangGraph – Mì AI
  2. Nguyễn Chiến Thắng on [Nhận diện biển số xe] Chương 3 – Phát hiện biển số bằng OpenCV thuần
  3. Trần Sơn Dương on [Nhận diện biển số xe] Chương 3 – Phát hiện biển số bằng OpenCV thuần
  4. Salomon on [CV] Thử làm model cảnh báo ngủ gật cho tài xế oto bằng Dlib và Resnet
  5. khang on Xây dựng hệ thống nhận diện thủ ngữ – ngôn ngữ ký hiệu tay – để giao tiếp với người khuyết tật

Categories

  • Basic
  • Computer Vision
  • Data Science – Data Analysis
  • Generative AI
  • MÌ ÚP
  • Natural Language Processing
  • RNN-LSTM-GRU
  • Share Data

Là người đi trước, hãy biết đưa tay lại phía sau.

Nguyễn Chiến Thắng
Cảm ơn các bạn đã ủng hộ Mì AI!