2011-08-09 49 views
14

Tôi đã thử nhiều lần để tạo một thuật toán trích xuất thông tin đột quỵ từ các ký tự Trung Quốc. Tôi đã thử các phương pháp khác nhau nhưng không có gì là rất thỏa mãn, có lẽ vì kiến ​​thức hạn chế của tôi về thuật toán đồ họa nói chung.Cách trích xuất đột quỵ từ ký tự Trung Quốc

Về cơ bản, tôi có các dữ liệu sau:

  • Nhân vật Trung Quốc, có thể là một trong hai pixel hoặc vector (màu đen)

  • Khái quát chung của đột quỵ, theo pixel (trong màu đỏ)

  • Hướng tổng thể (mũi tên màu xanh lam).

enter image description here

Từ đó, tôi đang cố gắng để trích xuất các cơn đột quỵ. Nếu bạn phải làm điều này, với dữ liệu sẵn có, bạn sẽ sử dụng phương pháp nào? Bạn có thể nghĩ ra bất kỳ cách tự động nào để trích xuất đột quỵ không?

+0

câu hỏi khó. –

+0

Bạn đang sử dụng cái này cho chính xác? – Szabolcs

+1

Tôi muốn tạo hoạt ảnh đột quỵ ký tự. –

Trả lời

4

Tôi bắt đầu với việc tính toán khoảng cách tới điểm ảnh màu trắng gần nhất từ ​​mỗi pixel màu xanh lam. Sau đó, bạn có thể giữ tất cả các điểm ảnh màu đỏ gần hơn điểm ảnh màu trắng gần nhất. Hiệu ứng này có thể được làm mịn với một số bộ lọc sau đó (có thể là một cái gì đó giống như một erosion theo sau là close).

2

Tôi không nghĩ bạn có thể đưa ra thuật toán không có trường hợp thuật toán không chính xác. Có một số phần của một số ký tự giống nhau nhưng không tương đương với cùng số đếm. Ví dụ, 馬 về mặt kỹ thuật cũng bao gồm 口 từ một quan điểm trực quan (không phải lingusitical, tất nhiên).

Ý tưởng duy nhất tôi có là phân khu vực thành các khu vực nhỏ và viết một thuật toán sẽ cố gắng theo thứ tự được đặt trong đó nét vẽ, nhưng tôi không thể tưởng tượng điều đó dễ dàng và tùy thuộc vào phông chữ, một số dòng được mở rộng thành các vùng mà chúng không được in.

Cũng có một số ký tự không hoạt động tốt với thuật toán do bố cục bất thường của chúng - chỉ bằng cách tuân thủ các quy tắc nghiêm ngặt của thứ tự đột quỵ bạn có thể nhận được đúng số: ví dụ bao gồm 凹 và 凸.

Tôi phải hỏi - đếm đột quỵ là thông tin cơ bản cho từng ký tự - tại sao bạn cần phải tạo một thuật toán để đếm nó? Nó sẽ không được dễ dàng hơn để làm nhận dạng ký tự và chỉ cần tra cứu số lượng đột quỵ cho nhân vật trong một từ điển tùy chỉnh?

+0

Tôi tin rằng OP có thêm thông tin về các nét được đưa ra bởi các mũi tên màu xanh lam. Ngoài ra anh ta dường như không quan tâm đến việc đếm đột quỵ nhưng trong việc tách chúng (có thể tạo ra một phiên bản hoạt hình?). –

+0

Có, tôi không tìm số đếm đột quỵ vì tôi biết có cơ sở dữ liệu cho điều đó. Tôi muốn trích xuất từng nét (hình dạng đồ họa của nó) từ một nhân vật. Vì tôi cho rằng nó không thể được thực hiện một cách tự động, tôi sẽ "hướng dẫn" thuật toán bằng cách cung cấp đường màu xanh và các điểm ảnh màu đỏ (về cơ bản, tôi vẽ lên đầu ký tự bằng một cọ lớn, theo thứ tự nét). Ngoài ra tôi nhận ra rằng một số trường hợp có thể phức tạp hơn (tôi đã có trong tâm trí đột quỵ như trong 中) nhưng một vấn đề tại một thời điểm :) –

+0

Ah, tôi thấy những gì bạn có ý nghĩa. Đó là cách trên đầu của tôi! ; o; Chúc bạn may mắn, có vẻ như sẽ có rất nhiều công việc. – aevanko

3

Bạn có thể đang tìm kiếm medial axis, còn được gọi là topological skeleton. Trong ngắn hạn, bạn sẽ giải quyết để tìm tất cả các điểm được cách nhau hơn một điểm trên cạnh. Bạn có thể cần phải làm một số làm mịn hoặc đơn giản hóa đường cong kết quả.

Phần khó khăn là tách một phần của hình dạng phổ biến đến nhiều lần. Tôi không tin rằng có một cách được xác định rõ ràng để làm điều đó. Có lẽ xác định "khu vực chung" là vòng tròn tập trung vào mỗi giao điểm bộ xương, tiếp tuyến với các cạnh gần nhất? Sau đó, có lẽ một số nội suy của chiều rộng đột quỵ trên khoảng cách?

1

Tôi nghĩ điều đơn giản nhất có thể có thể làm việc là:

  1. cốt truyện mũi tên màu xanh, từng người một
  2. tính toán khoảng cách chuyển đổi của mỗi dòng phân khúc màu xanh
  3. giao nhau khoảng cách rời rạc này với các khu vực màu đỏ
  4. xóa các khu vực màu đỏ có khoảng cách đến phân đoạn màu xanh lớn hơn T

Khi bạn đã hoàn thành công việc này, sau đó bạn có thể làm việc trên các chiến lược tinh vi hơn để chọn một phân khúc tốt, phụ thuộc vào T.

2

Từ dòng màu xanh lam và hình ảnh mẫu Tôi nghĩ phương pháp ba bước này có thể hoạt động trong một vài trường hợp:

  1. Đối với mỗi điểm dọc theo dòng, chọn tất cả các pixel màu đỏ gần hơn đến điểm đó so với pixel màu trắng gần nhất. Điều này sẽ cung cấp cho bạn đột quỵ của nhân vật, nhưng với phình xung quanh khu vực nơi hai nét chéo, và bạn sẽ loại trừ một số điểm ảnh ở cả hai đầu của đột quỵ.

  2. Để loại bỏ các chỗ phình ra, cô lập các pixel cạnh của đột quỵ và tính hough transform cho hình ảnh cạnh đó. Chọn hai dòng quan trọng nhất từ ​​đó. Điều này sẽ cung cấp cho bạn (nếu đột quỵ là đủ straigh) hai dòng dọc theo các cạnh của đột quỵ. Loại bỏ tất cả các điểm ảnh màu đỏ từ đường nét của bạn cách xa đường màu xanh dương theo hướng vuông góc hơn hai đường này. Bây giờ (đối với một cú đánh hoàn toàn thẳng), tất cả những gì bạn đang thiếu sẽ là một số điểm ảnh nhỏ bị cô lập mà hapened bị loại bỏ ở bước 1 hoặc bước 2 như vậy:

  3. Thêm tất cả các vùng pixel nhỏ bị cô lập chỉ chạm vào đột quỵ, và không có phần nào khác của nhân vật đối với đột quỵ. Nếu các dòng bạn tìm thấy ở bước 2 quá gần với đường màu xanh, bạn cũng có thể thực hiện bước này giữa các bước 1 và 2.

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