2013-09-05 34 views
5

Tôi đang tìm phương pháp Ngưỡng thích ứng tốt nhất để xử lý hình ảnh. Nhưng tôi có vấn đề với hình ảnh tối và mờ. hình ảnh
Input:
Let the Image load...Ngưỡng thích ứng với hình ảnh bị mờ

và khi tôi sử dụng phương pháp ngưỡng thích nghi tôi nhận
Output Hình ảnh này:
Let the Image load...

Đây không phải là tốt cho tôi!
Vì vậy, ai đó có thể giúp tôi khắc phục vấn đề này?


một hình ảnh: enter image description here

và: enter image description here

là người đầu tiên có vẻ rất xấu với @ Hammer'solution (i phải chọn kênh c), thứ hai tôi có thể sử dụng ngưỡng thích nghi bình thường.
vì vậy tôi muốn tìm giải pháp tốt nhất cho mọi trường hợp.

cảm ơn Một lần nữa!

Trả lời

7

Có vẻ như màu sắc là một chỉ báo tốt hơn cho phân đoạn trong hình ảnh của bạn hơn cường độ. Hãy thử chuyển đổi nó thành HSV và sau đó chạy OTSU trên kênh H.

trong python

hsv = cv2.cvtColor(image, cv2.cv.CV_BGR2HSV) 
cv2.imshow('hsv', hsv[:,:,0]) 
(thresh, im_bw) = cv2.threshold(hsv[:,:,0], 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU) 
cv2.imshow('OTSU', im_bw) 

cho (HSV)

enter image description here

và sau đó (Otsu)

enter image description here

Một xói mòn ít và giãn nở và bạn sẽ được tốt để đi

+0

có, Hammer cảm ơn cho câu hỏi của bạn. điều đó có vẻ là tốt cho trường hợp này và xấu cho bất kỳ trường hợp nào. vậy làm thế nào tôi có thể chọn giải pháp tốt nhất? cảm tạ ! – minhthuan

+0

@minhthuan Kết quả khác biệt giữa cái tốt và cái xấu nào khác? Hiển thị một số hình ảnh không phù hợp với giải pháp của Hammer. – WangYudong

+0

Câu trả lời hay. Điều gì về việc chọn ngưỡng, để có được nhiều cấp độ? Đã có một số phép thuật OpenCv? – CapelliC

1

Nếu một ngưỡng đơn không đủ để tách tất cả hình ảnh, bạn có thể thử Watershed algorithm với hai ngưỡng.

Sử dụng ngưỡng cao để có được hình ảnh với phân khúc chắc chắn là một phần của chữ số và ngưỡng nghịch đảo cao để có được hình ảnh với phân đoạn chắc chắn không phải là một phần của chữ số.

Loại bỏ cả hai hình ảnh một chút để tăng độ chắc chắn.

Sau đó, sử dụng 2 hình ảnh làm hạt giống cho lưu vực.

Here is an answer where this is done

2

Bạn có thể quan tâm these ngưỡng thích nghi được sử dụng bởi OpenCV.

Tôi đã sử dụng ngưỡng trung bình thích ứng. Bạn có thể phải chơi với các tham số một chút, nhưng nếu hình ảnh của bạn là tương tự (cùng kích thước vv), hy vọng sẽ không có quá nhiều tinh chỉnh cần thiết.

# Smooth image 
filtered = cv2.adaptiveThreshold(input_image.astype(np.uint8), 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 41, 3) 

# Some morphology to clean up image 
kernel = np.ones((5,5), np.uint8) 
opening = cv2.morphologyEx(filtered, cv2.MORPH_OPEN, kernel) 
closing = cv2.morphologyEx(opening, cv2.MORPH_CLOSE, kernel) 

Kết quả:

enter image description here

enter image description here

enter image description here

1

Các mã sau ...

im=cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,111,3) 
cv2.imshow('mkm',im)` 

... mang lại cho một kết quả tốt:

adaptive image

Các vấn đề liên quan