Hình vuông diễu hành: Tìm nhiều đường viền trong một trường nguồn?


9

Về cơ bản, đây là câu hỏi tiếp theo cho một vấn đề từ vài tuần trước , mặc dù đây là về thuật toán nói chung mà không áp dụng cho vấn đề thực tế của tôi.

Thuật toán về cơ bản tìm kiếm thông qua tất cả các dòng trong ảnh, bắt đầu từ phía trên bên trái của nó, cho đến khi nó tìm thấy một pixel là một đường viền. Trong giả C ++:

int start = 0;
for(int i=0; i<amount_of_pixels; ++i)
{
   if(pixels[i] == border)
   {
      start = i;
      break;
   }
} 

Khi tìm thấy nó, nó bắt đầu thuật toán hình vuông diễu hành và tìm đường viền cho bất kỳ đối tượng nào mà pixel thuộc về.

Hãy nói rằng tôi có một cái gì đó như thế này:

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

Nơi mà tất cả mọi thứ trừ màu trắng là một đường viền.

Và đã tìm thấy các điểm đường viền của blob đầu tiên:

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

Đối với thuật toán chung, nó đã kết thúc. Nó tìm thấy một đường viền và đã thực hiện công việc của nó. Làm thế nào tôi có thể chuyển sang hai đốm màu khác để tìm đường viền của chúng?


cần giúp đỡ về vấn đề này, vui lòng xem trong stackoverflow.com/questions/17232672/NH

Câu trả lời:


7

Bạn có thể chỉ cần xóa đa giác mà nó tìm thấy bằng cách vẽ nó trong màu nền và lặp lại cho đến khi không còn gì?


1
Đó là cách nó nên được thực hiện. Lấp đầy phần tử tìm thấy với nền (hoặc màu khác) và tiếp tục tìm kiếm (bạn có thể tiếp tục tại điểm bạn tìm thấy "kết quả" đầu tiên)
bummzack

Tuyệt vời. Tôi thậm chí còn không biết về việc lấp lũ. cảm ơn.
TravisG


1

tại sao không lưu thông tin blob vào một mảng khác và kiểm tra xem các pixel mới tìm thấy có nằm trong hộp giới hạn của blob trước đó không? Một số thao tác nữa sẽ được yêu cầu để xử lý các đốm màu bên dưới ly tâm của các đốm trước đó và nằm trong hộp giới hạn.

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.