2013-04-09 39 views
9

x-phái sinh Sobel trông như vậy:Bộ lọc Sobel có được chuẩn hóa không?

-1 0 +1 
-2 0 +2 
-1 0 +1 

phép nói rằng có hai mẫu hình ảnh của tôi trông như thế (0 = đen, 1 = trắng):

0 0 1   1 0 0 
0 0 1  &  1 0 0 
0 0 1   1 0 0 

Nếu tôi thực hiện convolution tôi sẽ kết thúc với 4 và -4 tương ứng.

Vì vậy, phản ứng tự nhiên của tôi sẽ là bình thường hóa kết quả bằng 8 và dịch nó theo 0.5 - điều đó có đúng không? (tôi tự hỏi như không thể tìm thấy Wikipedia, vv nhắc đến bất kỳ bình thường)

EDIT: tôi sử dụng bộ lọc Sobel để tạo ra một tensor Cấu trúc 2D (với các dẫn xuất dX và dY):

    A B 
Structure Tensor = C D 

with A = dx^2 
     B = dx*dy 
     C = dx*dy 
     D = dy^2 

Cuối cùng tôi muốn lưu kết quả vào [0,1], nhưng bây giờ tôi chỉ tự hỏi liệu tôi có phải chuẩn hóa kết quả Sobel (theo mặc định, không chỉ để lưu trữ kết quả đó) hay không, tức là:

A = dx*dx 
//OR 
A = (dx/8.0)*(dx/8.0) 
//OR 
A = (dx/8.0+0.5)*(dx/8.0+0.5) 
+1

chỉ phụ thuộc vào đơn đăng ký của bạn. Nếu mục tiêu là lưu trữ nó và trực quan hóa kết quả dưới dạng bitmap, thì bạn nên dịch và mở rộng để nó nằm trong khoảng 0..255. Mục tiêu của bạn là gì ? – WhitAngl

+0

"Vì vậy, phản ứng tự nhiên của tôi sẽ là bình thường hóa kết quả của 8 và dịch nó bằng 0,5 - đúng không?" Câu trả lời của bạn cho cái gì? –

+0

@WhitAngl: lưu trữ và hình dung là mục tiêu cuối cùng (vì vậy tôi sẽ thực hiện việc chuẩn hóa/dịch phù hợp), nhưng tôi phải tính toán thêm một chút ở giữa. Và tôi tự hỏi liệu Sobel Filter ALWAYS có được chuẩn hóa hay không (xem câu hỏi cập nhật). – Tom

Trả lời

0

Một chuẩn hóa toán học chính xác cho bộ lọc Sobel là 1/8, vì nó mang lại kết quả cho các đơn vị tự nhiên của một cấp độ xám trên mỗi pixel. Nhưng trong lập trình thực tế, điều này không nhất thiết phải là điều đúng đắn để làm.

0

Bộ lọc Sobel là loại phương pháp tiếp cận heuristic để phân biệt theo chiều ngang hoặc chiều dọc. Do đó, bình thường hóa có thể tùy ý. Tôi thấy bình thường hóa sau đây có ý nghĩa hơn những người khác, chiếm một nửa tổng giá trị tuyệt đối.

http://www.imagemagick.org/discourse-server/viewtopic.php?t=14434&start=30

Thực tế, hình ảnh scikit sử dụng phương pháp này. ví dụ:

>>>from skimage import filters 
>>>import numpy as np 
>>>one[:,0] = 2 
>>>one 
array([[ 2., 1., 1.], 
     [ 2., 1., 1.], 
     [ 2., 1., 1.]]) 
>>>filters.sobel_v(one) 
array([[ 0., 0., 0.], 
     [ 0., -1., 0.], 
     [ 0., 0., 0.]]) 
Các vấn đề liên quan