2010-06-09 33 views
6

Tôi đang tìm cách làm nền trừ trên một hình ảnh. Tôi mới dùng MATLAB và mới để xử lý/phân tích hình ảnh, vì vậy xin lỗi nếu bất kỳ điều này nghe có vẻ ngu ngốc. 1) Khác với imsubtract() có cách nào khác để làm nền trừ (ngoài việc so sánh hình ảnh này với hình ảnh khác)? 2) Trong Math Works explanation cho imsubtract() tại sao chúng tạo thành phần cấu trúc của chúng thành một đĩa? Điều này có vẻ khá khó khăn cho đến nay bởi vì mỗi khi tôi cố gắng một cái gì đó, tôi kết thúc không chỉ trừ đi nền ồn ào mà còn mất đi các phần của hình ảnh tôi muốn xem!Trừ nền trong MATLAB

Trả lời

5

Bạn làm việc với loại hình ảnh nào?

Bối cảnh trừ thật dễ dàng. Nếu bạn muốn trừ một giá trị không đổi hoặc một nền có cùng kích thước với hình ảnh của bạn, bạn chỉ cần viết img = img - background. imsubtract chỉ đơn giản là đảm bảo rằng đầu ra là số không bất cứ nơi nào nền lớn hơn hình ảnh.

Bối cảnh ước tính thật khó. Ở đó bạn cần phải biết loại hình ảnh bạn đang xem, nếu không, ước tính nền sẽ thất bại.

Nếu bạn có, ví dụ, đối tượng địa lý giao ngay hoặc sáng trên nền tối, bạn có thể chuyển qua bộ lọc tối đa cục bộ (imdilate) hoặc bộ lọc tối thiểu cục bộ (imerode) , đó là lớn hơn các tính năng của bạn, để bất cứ nơi nào bạn đặt mặt nạ lọc, có một số điểm ảnh bao gồm nền. Ngoài ra, bạn muốn bộ lọc có hình dạng tương tự như các tính năng. Trong trường hợp của bạn, nếu bạn mất một phần của hình ảnh của bạn, bạn có thể muốn thử và làm cho bộ lọc lớn hơn (nhưng không quá lớn).

Thay vì trừ tối đa hoặc tối thiểu, trừ trung bình có thể hoạt động tốt, mặc dù bạn phải chọn kích thước bộ lọc sao cho thường có phần lớn pixel nền bên trong mặt nạ bộ lọc. Thật không may, lọc trung bình khá chậm.

+0

+1 Ước tính nền khó! – Geoff

+0

Phép trừ nền hơi khác một chút so với bạn đã đề xuất. Các imsubtract không phải là phép trừ nền, không phải là những gì bạn đề nghị. Tính năng trừ nền chỉ nên ảnh hưởng đến pixel nền chứ không ảnh hưởng đến toàn bộ hình ảnh. Hãy xem xét một nền trắng. Bây giờ, một quả bóng màu đen di chuyển qua hình ảnh. Trừ hình ảnh sẽ luôn luôn bao gồm các đối tượng hoặc bóp méo màu sắc (tùy thuộc vào việc thực hiện), trong khi trừ nền không ảnh hưởng đến điểm ảnh khác nhau hoàn toàn từ mô hình nền (tiền cảnh). – Anthony

+0

@Anthony: Điều này phụ thuộc rất nhiều vào loại hình ảnh bạn làm việc. Nếu cường độ của nền trước và nền là phụ gia (đó là những gì tôi thường làm việc với), sau đó nền được trừ khỏi toàn bộ hình ảnh. Trong trường hợp của bạn, thực sự trừ nền chỉ nên ảnh hưởng đến các điểm ảnh không có tín hiệu. – Jonas

2

Để trừ hình nền, bạn cần mô hình nền. Mô hình đơn giản nhất là hình ảnh được chụp dưới dạng nền cùng với một số độ lệch cho phép (+/- 0-255). Sau đó, phép trừ nền trong MATLAB khá đơn giản:

image (tìm (abs (hình nền) < = ngưỡng)) = 0;

Nó trở nên khó khăn hơn khi bạn sử dụng một mô hình thống kê, nhưng về cơ bản trừ nền là khá dễ dàng. imsubtract KHÔNG phải là phép trừ nền; nó là một bộ lọc trừ như bạn sẽ tìm thấy trong photoshop. Nó không quan tâm về nền so với nền trước, sau đó đánh bại điểm.

Vì phép trừ nền chính nó là khá dễ dàng, câu hỏi sẽ trở nên nhiều hơn về ước tính nền. Điều này phức tạp hơn một chút, và thường đòi hỏi nhiều khung hình hơn và đào tạo để xây dựng các mô hình thống kê nền (ví dụ, xem các pixel như các bản phân phối Gaussian hoặc hỗn hợp Gaussians, hoặc tìm kiếm thay vì dòng quang để xác định những gì không chuyển động).

Nếu bạn có quyền truy cập vào các bài viết kỹ thuật (thông qua cơ quan hoặc trường học), "Pfinder: Theo dõi thời gian thực của cơ thể con người" của Wren và những người khác đưa ra một cách tiếp cận khá đơn giản. Hoặc bạn chỉ có thể tìm kiếm google cho phép trừ nền Gaussian đơn. Có một số phương pháp được triển khai với OpenCV tại đây ->http://dparks.wikidot.com/source-code < - mà bạn có thể thấy hữu ích.

2

Computer Vision System Toolbox có đối tượng vision.ForegroundDetector, thực hiện biến thể của phép trừ nền GMM của Stauffer và Grimson. Việc triển khai thực hiện rất nhanh, tận dụng nhiều lõi. Hãy xem example cách sử dụng tính năng trừ nền này làm khối xây dựng của một hệ thống để theo dõi nhiều đối tượng.