2010-11-20 63 views
6

Giả sử tôi có hình ảnh với hình tròn và hình vuông. Có cách nào để tìm hình vuông cho ma trận của hình ảnh không? (chỉ có một hình vuông, và thời gian không thực sự là một vấn đề). Cảm ơn.Thuật toán để tìm hình vuông trong hình ảnh?

+1

Đây có phải là hình vuông hoàn hảo hoặc "hình vuông" không? –

+1

Hình chữ nhật, chính xác. Nhưng nó khá là vani. Giả sử nó được vẽ bằng công cụ MS Paint "square" và sau đó được lưu dưới dạng gif. –

+1

Hình vuông có được căn chỉnh theo trục hay xoay không? – thejh

Trả lời

3

Hãy chia tất cả các điểm thành "sáng" và "tối".

Tìm các điểm sáng, và các điểm trên và dưới cũng được thắp sáng. Những người có thể là một phần của một cạnh.

Tương tự: nếu một điểm (x, y) được thắp sáng và các điểm (x + 1, y), (x + 2, y) cũng được thắp sáng, nhưng (x-1, y) và (y-1) , y) tối, và tương tự theo hướng Y, sau đó bạn rất có thể tìm thấy một góc trên bên trái. Và cứ thế. Bằng cách này bạn có thể tìm thấy các góc và sau đó tìm hình vuông từ chúng - dường như là một cách tiếp cận đơn giản.

0

Nếu hình vuông trong hình ảnh hoàn hảo, hãy kiểm tra xem có đường viền ở vị trí mong muốn không. Mã giả trong câu trả lời của thejh sẽ hoạt động tốt.

+0

Cảm ơn, Gintautas. Xin lỗi để hỏi bạn điều này, nhưng bạn có thể chính thức hơn một chút không? Một số toán học, hoặc giả mã có lẽ? Tôi đang gặp sự cố khi phân tích cú pháp câu. Cảm ơn. –

+0

Vâng, câu đầu tiên của tôi đã bị hỏng, xin lỗi. Đang sửa. –

+0

Tôi hiểu lầm câu hỏi của bạn, tôi nghĩ rằng bạn đang tìm kiếm một hình chữ nhật đầy chứ không chỉ là countour, như được cung cấp bởi công cụ "Rectangle" của Paint. Trong trường hợp này giải pháp đơn giản hơn rất nhiều. –

3

Một cái gì đó như thế này?

for (x,y of every black pixel) { 
#those methods should return true if the lines length is more than one pixel 
if (hasLineToRight(x,y)&&hasLineToBottom(x,y)) { 
    otherx=highestXOfLineToRight(); 
    othery=highestYOfLineToBottom(); 
    if (isLine(x,y,x,othery)&&isLine(x,y,otherx,y)) { 
    addBoxToList(x,y,otherx,othery); 
    } 
} 
} 

box image

Bạn propably muốn sử dụng hộp với các giá trị chiều rộng và chiều cao cao nhất.

0

Điều gì về flood filling bắt đầu từ các điểm ngẫu nhiên cho đến khi bạn tìm thấy hình chữ nhật của mình?

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