2012-09-09 42 views
6

Tôi muốn xác định các hình vuông/hình chữ nhật trong số UIImageView (hoặc UIImage) của mình.Xcode, iOS - Nhận dạng dòng/hình dạng hình ảnh

Tôi đã xem "Very simple image recognition on iOS", nhưng đó không phải là những gì tôi đang tìm kiếm.

Hiện tại, tôi có UIImageView được cung cấp UIImage tùy từng thời điểm.

Hầu hết số UIImage es có hình vuông/hình chữ nhật màu đen như sau: img. Nhưng các góc có thể (hoặc có thể không) đã làm tròn các cạnh.

Làm cách nào để xác định kích thước hình vuông/hình chữ nhật màu đen đầu tiên? Kết quả cuối cùng sẽ là thay đổi kích thước UIImageView của tôi để làm cho hình vuông màu đen đầu tiên trong UIImage lấp đầy màn hình. Giống như vậy: img With iPhone

+0

Bạn có thể chỉ làm rõ lớp hình ảnh bạn sẽ sử dụng trong thực tế không? Bạn sẽ luôn luôn được sử dụng hộp phác thảo màu đen với tất cả mọi thứ khác màu trắng hoặc nó sẽ được, nói, hộp với nội dung tùy ý bao quanh bởi một đường viền màu đen trên màu trắng, hoặc cái gì khác một lần nữa? – Tommy

+2

bởi "hình vuông", bạn thực sự có nghĩa là "hình chữ nhật"? vui lòng làm rõ ... – Felix

+0

tạo trình xem truyện tranh? bạn S likely có thể phải làm một số nhận dạng mẫu nhưng nó không nên quá xấu nếu bạn chỉ tìm kiếm các đường phân cách như thế. – TomSwift

Trả lời

10

Nếu hình ảnh của bạn sẽ luôn là hình vuông màu đen ở hàng ngang, bạn có thể sử dụng tính năng phát hiện góc để xác định hình chữ nhật, sau đó chọn bốn góc ngoài cùng bên trái. Tôi có ba biến thể của máy dò góc trong khuôn khổ mã nguồn mở GPUImage dựa trên các phương pháp phát hiện góc Harris, Noble và Shi-Tomasi.

Chạy một GPUImageHarrisCornerDetectionFilter chống lại hộp của bạn với một ngưỡng 0,4 và sự nhạy cảm của 4,0 mang lại kết quả sau:

Harris corner detection results

Họ là một ít khó khăn để nhìn thấy, nhưng chữ thập đỏ đánh dấu nơi dò tìm thấy các góc của các hộp của bạn. Một lần nữa, bạn chỉ cần tận dụng tối đa bốn điểm để tìm hình chữ nhật mục tiêu của bạn, và sau đó chỉ đơn giản là quy mô hình ảnh hoặc xem của bạn để hình chữ nhật này bây giờ lấp đầy tầm nhìn của bạn.

Ví dụ về cách chạy tính năng phát hiện tính năng như vậy có thể được tìm thấy trong ví dụ FilterShowcase hoặc FeatureExtractionTest trong khuôn khổ của tôi. Tôi mô tả quá trình mà tôi làm điều này trong this answer qua lúc Xử lý tín hiệu.

+0

Giải pháp rất tốt! +1 từ tôi. Thật không may câu hỏi đã được sửa đổi để cũng chứa các góc tròn ... –

+0

Cảm ơn bạn đã có một khuôn khổ tuyệt vời! Tuy nhiên, tôi không thể làm việc này được. Tôi thậm chí đã thử ví dụ FeatureExtractionTest, và nó không tìm thấy bất kỳ góc nào. Tôi đã đăng câu hỏi của riêng tôi ở đây (trước khi nhìn thấy điều này) http://stackoverflow.com/questions/18914461/gpuimage-how-to-chain-filters-with-gpuimagepicture – Mikael

+0

Có vẻ là một vấn đề iOS 7.0 ... – Mikael

-2

Từ những gì tôi hiểu về câu hỏi của bạn, bạn cần triển khai Canny Edge Detection Algorithm để phát hiện các cạnh của đường viền màu đen trong hình ảnh của bạn.

Đối với điều này, bạn nên sử dụng khuôn khổ xử lý hình ảnh có sẵn tại các liên kết sau đây

Sử dụng ImageWrapper *Image::cannyEdgeExtract(float tlow, float thigh) chức năng từ tập tin Image.m.

+0

Phát hiện cạnh canny sẽ không giúp bạn ở đây, bởi vì bạn vẫn sẽ cần phải xác định các hộp giới hạn các cạnh xác định. Ngoài ra, nó sẽ nhận hai cạnh: một cho bên ngoài của hộp, và một cho bên trong. Một bộ lọc sườn núi có lẽ sẽ phù hợp hơn, nhưng bạn vẫn sẽ cần phải xác định các hộp từ đó. –

0

Có vẻ như giải pháp đơn giản nhất sẽ là:

  1. sum lên tất cả các pixel theo chiều dọc để hàng top-nhất (như một bảng excel)
  2. hàng có giá trị nhỏ nhất/lớn nhất là "khoảng cách" khu vực của bạn

chiều rộng có thể được lấy từ (2).

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