Làm thế nào để loại bỏ nền nhất định từ hình ảnh?


11

trái cam

Đây là hình ảnh thu được sau khi lọc Gabor ... Có cách nào để loại bỏ các đường bên trong hình ảnh ngoại trừ khuyết điểm tròn trắng sáng.

Đã thử định hướng khác của bộ lọc gabor đi đến kết quả sau:

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

Sau khi đập: Cái nào cũng đủ nhưng không tuyệt vời

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

Sau khi lọc trung vị:

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

Cảm ơn trước


2
Tốt công việc với bộ lọc trung bình. Bạn đang đi đúng hướng.
Xem lại

Đây có vẻ là một kịch bản tốt để áp dụng bộ lọc khuếch tán. Ngoài ra, thử hỏi trong: <br/> dsp.stackexchange.com/ <br> photo.stackexchange.com/ <br>
Danny Varod

Bạn đã áp dụng bộ lọc trung bình sau ngưỡng? Nếu vậy, hãy thử nó mà không có ngưỡng.
Daniel Varod

Vâng, tôi đã thử nó sau khi đập và tôi đã nhận được kết quả gần như tương tự khi tôi cũng làm điều đó trước đây
vini

Câu trả lời:


12

Nếu đầu ra của bộ lọc Gábor của bạn đáng tin cậy và sự thay đổi trong dữ liệu hình ảnh của bạn không quá cao đến mức kết quả trông hoàn toàn khác nhau, thì bạn có thể sử dụng phương pháp sau (các phần của nó đã được đề cập):

  1. Binarize hình ảnh thứ hai của bạn với bất kỳ thuật toán ngưỡng tự động. Phạm vi các ngưỡng sẽ hoạt động lớn như bạn sẽ thấy.

  2. Sử dụng thuật toán ghi nhãn thành phần để gắn nhãn cho từng vùng pixel được kết nối với một giá trị duy nhất.

  3. Tính toán cho mọi thành phần của hình ảnh của bạn một thuộc tính mô tả, mức độ gần đối tượng của bạn với một vòng tròn được lấp đầy. Đối với điều này, bạn có thể sử dụng ví dụ về sự nhỏ gọn . Tôi đã sử dụng dưới tỷ lệ pixel trong bán kính đĩa tương đương . Bán kính này là bán kính một đĩa có cùng diện tích với đối tượng của bạn.

    1. Diện tích chỉ đơn giản là đếm số pixel của đối tượng của bạn
    2. Tính bán kính hình tròn cho diện tích của nó cũng có thể quản lý được
    3. Đối với pixel bên trong bán kính này, bạn cần trung tâm của từng đối tượng hình ảnh, nhưng đây chỉ là giá trị trung bình của tất cả các vị trí của pixel đối tượng. Nếu bạn là một nhà vật lý thì bạn biết trung tâm khối lượng của một số khối lượng điểm. Điều này là tương đương.
    4. Bây giờ bạn tính cho mỗi pixel của mỗi đối tượng khoảng cách từ tâm của nó và kiểm tra xem nó có nhỏ hơn bán kính vòng tròn hay không. Chia hai số và bạn có được tỷ lệ pixel bên trong và bên ngoài.
  4. Lấy đối tượng có phần cao nhất. Lưu ý: các đối tượng chỉ có một pixel sẽ nhận được giá trị là 1. Vì vậy, bạn nên đặt ngưỡng kích thước và chỉ lấy các đối tượng lớn hơn, giả sử là 10 pixel.

Để thấy rằng, một công cụ nhị phân tự động sẽ hoạt động, đây là kết quả cho một ngưỡng rất thấp và rất cao:

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

Cập nhật ghi nhãn thành phần

Sự lựa chọn của nhãn thành phần là không quan trọng cho ứng dụng của bạn. Tôi sẽ đề nghị, nếu bạn phải tự thực hiện nó, hãy sử dụng một phương pháp rất đơn giản. Các phiên bản một đường chuyền từ trang Wikipedia là rất dễ dàng. Về cơ bản, bạn lặp qua hình ảnh nhị phân của bạn và khi bạn gặp một pixel có màu trắng và chưa được gắn nhãn, bạn sử dụng nhãn mới cho đối tượng này và bắt đầu với pixel này.

Quá trình ghi nhãn đối tượng này bằng nhãn về cơ bản tương tự như lấp lũ. Đây là trên trang web Wikipedia các bước bên trong 1-4 trong thuật toán. Bạn bắt đầu với pixel được gắn nhãn này và đặt tất cả các hàng xóm của nó lên một ngăn xếp (họ đã sử dụng một vectơ ). Đối với một pixel trên ngăn xếp, bạn kiểm tra xem nó có phải là tiền cảnh và chưa được dán nhãn hay không. Nếu bạn phải gắn nhãn cho nó, bạn đặt lại tất cả các hàng xóm của nó trên ngăn xếp. Làm điều này cho đến khi ngăn xếp của bạn trống rỗng.

Sau đó, bạn tiếp tục quét qua hình ảnh. Không giống như mô tả trên trang Wiki, bạn không phải xóa pixel khỏi ảnh gốc, bạn chỉ cần bỏ qua khi bạn có giá trị khác 0 trong hình ảnh nhãn của bạn.


thuật toán ghi nhãn nào mà bạn muốn giới thiệu ở đây?
vini

1
@vini, mình cập nhật bài viết của mình. Phonon, cảm ơn. Chúng tôi sử dụng rất nhiều biện pháp hình thái và đặc biệt là sự gọn nhẹ rất hữu ích trong một thời gian trước đây.

yup tuyệt vời hiểu điều đó :)
vini

6

Một vài ý tưởng:

  1. Lọc các cạnh dựa trên mật độ của các cường độ cạnh. Sử dụng xấp xỉ một hạt nhân tròn, tìm cường độ cạnh trung bình (hoặc một số biện pháp khác). Vượt qua bất kỳ cạnh nào ở hoặc trên giá trị ngưỡng, đặt thành màu đen bất kỳ cạnh nào dưới ngưỡng.
  2. Sử dụng thao tác "đóng" hình thái (giãn theo sau xói mòn) để làm sạch hình ảnh, sau đó sử dụng thuật toán ghi nhãn vùng (còn gọi là thành phần được kết nối, các đốm màu) để tìm tất cả các đốm màu. Lọc dữ liệu blob theo kích thước, tỷ lệ giữa trục chính và trục nhỏ, v.v.
  3. Hãy thử làm mờ Gaussian, tìm ngưỡng nhị phân để phân chia ánh sáng từ bóng tối và sau đó lọc các đốm màu như mô tả trong bước 2 ở trên. (Để có một xấp xỉ nhanh chóng về độ mờ của Gaussian, hãy siết chặt mí mắt của bạn và nheo mắt nhìn vào hình ảnh.)
  4. Hãy thử một vài bộ lọc trong Photoshop hoặc GIMP.

EDIT: sau bước lọc trung bình của bạn, bạn hầu hết đều đi đến đó. Làm tốt lắm! Mục 2 mà tôi đã đề xuất ở trên (đóng, sau đó ghi nhãn vùng) là một kỹ thuật để đưa bạn đi tiếp.


yup sẽ thử điều đó sẽ cho phép bạn biết điều gì xảy ra
vini

1

Bạn có thể thử các đường viền tích cực. Mặc dù nó có thể chậm, nhưng nó có thể xử lý trường hợp phức tạp như thế này.

Hoặc bạn có thể sử dụng một số kiến ​​thức trước để xử lý hình ảnh này. Ví dụ: bạn biết rằng điều blob là 'lớn' và 'được kết nối'. Do đó, khi bạn đếm số lượng của từng khu vực được kết nối, bạn có thể tìm thấy 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.