Làm thế nào để bạn binarize một hình ảnh màu?


14

Bạn tôi có một hình ảnh màu với chữ viết tay Trung Quốc (về cơ bản bằng cách chụp ảnh hoặc quét những gì anh ấy viết trên một tờ giấy trắng), và anh ấy muốn tôi chuyển nó thành hình ảnh nhị phân đen trắng. Có ứng dụng nào trong Ubuntu có thể thực hiện được điều đó không?

Đây là một hình ảnh ví dụ:

nhập mô tả hình ảnh ở đây


Câu trả lời:


27

Những gì bạn muốn được gọi là "ngưỡng" trong xử lý hình ảnh. Về cơ bản, nó lấy một hình ảnh làm đầu vào và xuất ra một hình ảnh có tất cả các pixel có giá trị dưới ngưỡng cho trước được đặt thành màu đen và tất cả các pixel có giá trị nằm trên ngưỡng được đặt thành màu trắng. Điều này dẫn đến một hình ảnh đen trắng từ một hình ảnh đầu vào tùy ý.

Nói chung, bạn muốn chuyển đổi sang thang độ xám trước để có kết quả dễ đoán hơn, nhưng cũng có thể ngưỡng một hình ảnh đầy màu sắc.

Bạn có thể sử dụng một công cụ đồ họa như GIMP để thực hiện việc này một cách tương tác (bạn sẽ tìm thấy công cụ này thông qua menu chính -> Màu sắc -> Ngưỡng) hoặc bạn có thể sử dụng ImageMagick như thế này:

convert colored.png -threshold 75% thres_colored.png

Chạy lệnh trên trên hình ảnh ví dụ tạo ra kết quả hiển thị bên dưới.

Phiên bản đen trắng của hình ảnh OP

Vì ngưỡng thường là một phần của quá trình thử và lỗi để có kết quả mà bạn hài lòng, đặc biệt nếu hình ảnh nguồn không gần với đen trắng, nên tôi khuyên bạn nên sử dụng phương pháp GUI nếu có thể, nhưng nếu đó không phải là một lựa chọn cho bất kỳ lý do nào bạn có thể làm điều đó thông qua dòng lệnh. Để kiểm soát đầu ra tốt hơn, trước tiên bạn có thể sử dụng các công cụ như đường cong màu sắc, mức độ và độ tương phản để cách ly các phần sáng và tối của hình ảnh tốt hơn trước khi đập. (Trên thực tế, ngưỡng có thể được xem là một trường hợp cực đoan khi sử dụng công cụ đường cong màu.)


2
Cảm ơn! Vì một hình ảnh màu có ba kênh RBG, nên nói chung ngưỡng / có thể áp dụng cho cái gì?
Tim

@Tim Có thể tùy thuộc vào phần mềm, nhưng tôi sẽ mong đợi ngưỡng (trừ khi bạn chỉ định mỗi kênh hoặc cho một kênh cụ thể, xem ví dụ: -channeltùy chọn chuyển đổi của ImageMagick ) sẽ được áp dụng cho một số "giá trị" của pixel, được tính toán từ tất cả các kênh. Đó là lý do tại sao tôi nói rằng bạn có thể muốn chuyển đổi sang thang độ xám trước để có kết quả dễ đoán hơn. (Cũng xem bản chỉnh sửa của tôi.)
CVn

Cảm ơn! Có tồn tại một số tài liệu cho những gì ngưỡng áp dụng cho lệnh được hiển thị trong bài viết của bạn?
Tim

@Tim Không thật. Tôi dự kiến ​​chuyển đổi để lấy một tỷ lệ phần trăm của giá trị tối đa (đáng lẽ là 256 trên mỗi kênh) hoặc một giá trị cụ thể, nhưng tôi chỉ có thể nhận được kết quả hữu ích khi chỉ định tỷ lệ phần trăm. Khi bạn làm điều đó với một công cụ đồ họa, bao gồm GIMP, thông thường bạn sẽ có một biểu đồ cho thấy sự phân phối âm sắc của hình ảnh; đó sẽ là một trợ giúp tuyệt vời trong việc chọn giá trị thích hợp. Chỉ sử dụng dòng lệnh, trừ khi bạn có một lý do cụ thể để làm như vậy, có lẽ rắc rối hơn giá trị của nó, thực sự.
một CVn

2
Là một lưu ý phụ, tồn tại các phương pháp ngưỡng khác mà không phải dựa vào mức ngưỡng mã hóa cứng. Ví dụ: ImageMagick bao gồm -latthực hiện ngưỡng thích ứng cục bộ, có tính đến các pixel xung quanh.
voithos

7

Bạn có thể sử dụng Imagemagick:

convert test.png -colorspace Gray gray_colorspace.png

Từ đây .

Đây là những gì tôi nhận được sau khi áp dụng cho hình ảnh của bạn:

nhập mô tả hình ảnh ở đây


10
"Nhị phân" xuất phát từ "bi" có nghĩa là "hai", vì vậy tôi cho rằng OP muốn chuyển đổi hình ảnh thành đen trắng thuần túy. Chuyển đổi sang thang độ xám mang lại nhiều hơn hai cấp độ.
một CVn

Đã đồng ý! có ý nghĩa, +1.
mkc

2

-monochrom từ ImageMagick là một tùy chọn sử dụng một số phối màu thông minh và làm cho đầu ra rõ ràng hơn nhiều so với-thresholdkhi bạn dự định sử dụng cho con người:

convert -monochrome signature.png out.png

nhập mô tả hình ảnh ở đây

Không tạo ra nhiều khác biệt cho một hình ảnh đơn giản như vậy, nhưng đối với những hình ảnh lớn hơn, nó rất ấn tượng.


1

Bạn cũng có thể làm điều này một cách dễ dàng với netpbmbộ công cụ:

anytopnm inputfile | ppmtopgm | pgmtopbm > outputfile

ppmtopgmchuyển đổi thành hình ảnh thang độ xám, pgmtopbmchuyển đổi thành hình ảnh đen trắng và sau đó chúng tôi chuyển hướng đầu ra thành một tệp. Nó sẽ ở định dạng pbm; nếu bạn muốn một cái gì đó phổ biến hơn, bạn sẽ phải thêm một bộ chuyển đổi đầu ra (ví dụ, pnmtopnghoặc một số như vậy)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.