Xử lý hình ảnh: Làm thế nào để phát hiện một bảng hiệu hình tứ giác trong hình ảnh?


14

Làm cách nào tôi có thể phát hiện bảng hiệu hình tứ giác từ hình ảnh được chụp bằng điện thoại di động? Làm thế nào tôi có thể phát hiện các hình dạng như hình chữ nhật? hình chữ nhật tròn (góc tròn thay vì góc hình)?

Tôi đang sử dụng opencv.wrapper nhưng tôi chưa quen với nó.

Cảm ơn.

Đây là mẫu: văn bản thay thế http://www.freeimagehosting.net/uploads/b03442fd36.png

văn bản thay thế http://www.freeimagehosting.net/uploads/e6b36040e8.png

Do tiếng ồn và nhiều đường ở đó, tôi không thể xác định đó là đường biên của bảng hiệu. Đôi khi tôi có thể tìm thấy ranh giới của các dòng sau khi biến đổi hough. Tôi bị mắc kẹt .... trong loại kịch bản này ...

Đây là 2 hình ảnh thô được chụp từ camera điện thoại di động

văn bản thay thế http://www.freeimagehosting.net/uploads/6dbd613edf.jpg văn bản thay thế http://www.freeimagehosting.net/uploads/720da20080.jpg

Tôi cần lời khuyên của bạn để xem làm thế nào tôi có thể xử lý hình ảnh để có được bảng hiệu?

Cảm ơn rât nhiều


2
Từ khóa: opencv, biến đổi hough Nhân đôi: stackoverflow.com/questions/1817442 stackoverflow.com/questions/2068013

Vâng, biến đổi FTW!

nhưng có nhiễu trong hình ảnh làm thế nào tôi có thể tìm ra đó là ranh giới của bảng hiệu

@ xabi123: biến đổi hough, ngưỡng, đọc ra ranh giới

1
Bạn có thể chia sẻ một hình ảnh mẫu?

Câu trả lời:


7

Cả hai hình ảnh của bạn đều chứa nhiều dòng không liên quan gì đến dấu hiệu bạn đang tìm kiếm. Và một số dòng đó dài hơn / có độ tương phản cao hơn các dòng bạn thực sự muốn, vì vậy tôi nghĩ rằng việc phát hiện các đường biên (ví dụ: sử dụng biến đổi hough hoặc bằng cách tóm tắt độ tương phản theo chiều ngang / chiều dọc) sẽ không hiệu quả.

Nhưng: Dấu hiệu bạn đang tìm kiếm có các đặc điểm khác nên dễ phát hiện hơn:

  • Có nền dấu hiệu có (gần như) độ sáng không đổi
  • Nó chiếm một diện tích tương đối lớn của hình ảnh
  • Nó ở gần trung tâm của hình ảnh

Vì vậy, bạn đang tìm kiếm một khu vực kết nối lớn với độ tương phản thấp. Tôi đã hack một thuật toán bằng chứng trong Mathicala. (Tôi không phải là chuyên gia về OpenCV, nhưng tôi sẽ đề cập đến chức năng OpenCV tương ứng khi tôi biết họ.)

Đầu tiên, tôi sử dụng các bộ lọc đạo hàm gaussian để phát hiện cường độ gradient ở mỗi pixel. Bộ lọc phái sinh gaussian có khẩu độ rộng (11x11 pixel trong trường hợp này), vì vậy nó rất nhạy cảm với nhiễu. Sau đó tôi bình thường hóa hình ảnh gradient thành mean = 1, vì vậy tôi có thể sử dụng cùng một ngưỡng cho cả hai mẫu.

src = Import["http://www.freeimagehosting.net/uploads/720da20080.jpg"];
pixels = ImageData[ColorConvert[src, "Grayscale"]];
gradient = Sqrt[GaussianFilter[pixels, 5, {1, 0}]^2 + GaussianFilter[pixels, 5, {0, 1}]^2];
gradient = gradient/Mean[Flatten[gradient]];

Triển khai OpenCV: Bạn có thể sử dụng sepFilter2Dđể lọc thực tế, nhưng rõ ràng, bạn sẽ phải tự tính toán các giá trị nhân của bộ lọc .

Kết quả trông như thế này:

cường độ dốc

Trong hình ảnh này, nền dấu hiệu tối và đường viền dấu hiệu sáng. Vì vậy, tôi có thể binarize hình ảnh này và tìm kiếm các thành phần kết nối tối.

binaryBorders = Binarize[Image[gradient], 0.2];
sign = DeleteBorderComponents@ColorNegate[binaryBorders];
largestComponent = SortBy[ComponentMeasurements[sign, {"Area", "ConvexVertices"}][[All, 2]], First][[-1, 2]];

Triển khai OpenCV: Ngưỡng phải đơn giản, nhưng tôi nghĩ OpenCV không chứa phân tích thành phần được kết nối - bạn có thể sử dụng fill fill hoặc cvBlobsLib cho điều đó.

Bây giờ, chỉ cần tìm đốm màu lớn nhất ở gần trung tâm của hình ảnh và tìm vỏ lồi (Tôi chỉ đơn giản là sử dụng đốm màu lớn nhất không được kết nối với nền, nhưng điều đó có thể không đủ cho mọi hình ảnh).

Các kết quả: nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây


0

Một cách tiếp cận khác mà bạn có thể thực hiện mạnh mẽ hơn đối với tiếng ồn trong tình huống này là tạo một đường cong ở mức xám trung bình của hình ảnh dọc theo trục x và dọc theo trục y. Nghĩa là, tính mức xám trung bình cho mỗi dòng / cột trong ảnh.

Ví dụ, nếu bảng hiệu (hoặc đường viền của nó) nhẹ hơn môi trường xung quanh (đó là trường hợp của tất cả các ví dụ được hiển thị trong câu hỏi), bạn sẽ có hai đỉnh trong đường cong trục x của mình (cho bên trái và bên phải và đường viền ) và hai đỉnh trong đường cong trục y của bạn (đối với đường viền trên và dưới). Sử dụng kỹ thuật phát hiện đường viền cho tín hiệu 1 chiều (có thể là bộ lọc thông cao), bạn có thể suy ra tọa độ góc của bảng hiệu.

Tôi đã thấy cách tiếp cận này được sử dụng để phát hiện biển số xe và cả nhận dạng khuôn mặt (mũi có xu hướng là phần sáng hơn của khuôn mặt, vì vậy nó tạo ra một đỉnh trong các đường cong trục x và trục y).


hmm .. nếu biển hiệu được quay hoặc máy ảnh bị cuộn thì sao?
Must bắt đầu

0

Đây có thể là một ý tưởng lộn ngược một chút, nhưng có thể đáng để thử. Thay vì cố gắng phát hiện trực tràng và nghĩ về văn bản như tiếng ồn , có lẽ bạn có thể coi văn bản như thông tin và sử dụng nó để phát hiện trực tràng dễ dàng hơn.

Đây là phác thảo của ý tưởng:

  • phát hiện văn bản trong hình ảnh . Nó không cần phải là một triển khai mạnh mẽ (bạn có thể google một số thư viện nhỏ làm điều đó, hoặc có thể OpenCV có nó), chỉ là một ước tính sơ bộ của văn bản trong hình ảnh
  • tìm cener của tất cả các phát hiện văn bản . Ngay cả với những hình ảnh ồn ào, nó vẫn ở xung quanh địa điểm thực
  • làm Hough decetion hình chữ nhật trên khu vực xung quanh các văn bản phát hiện . Có thể sử dụng khoảng cách trung bình từ trung tâm của các phát hiện văn bản, hoặc một cái gì đó tương tự. Làm các đường kính khác nhau và thu hồi mạnh nhất .

Những giải thích và ưu điểm:

  • khu vực xung quanh văn bản thường đồng nhất - hình chữ nhật thực sự phải là hồi tưởng mạnh đầu tiên
  • bằng cách này, bạn không phải thực hiện chuyển đổi hough trên toàn bộ hình ảnh, vì vậy bạn có thể thực hiện nó một cách tự nhiên hơn (có thể nhiều lần trên cùng một khu vực nhưng với các kích thước nhóm khác nhau ...)
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.