2012-03-30 29 views
5

Tôi đang tính toán trung bình và phương sai của ảnh gốc và stego tôi để so sánh chúng Tôi đang sử dụng màu xám hình ảnh BMP cho comaprisonVariance và Mean Image

image=imread("image name") 
M = mean(image(:)) 
V = var((image(:))) 

Liệu đây là cách đúng fo tính trung bình/var trong MATLAB? Phương sai của tôi là nhận được nhiều hơn có nghĩa là ..

Bất kỳ giúp đánh giá cao ..

Trả lời

8

Đây là thực sự là cách chính xác để tính toán giá trị trung bình và phương sai trên tất cả các pixel của hình ảnh của bạn.

Nó không phải là bất khả thi mà sai của bạn lớn hơn giá trị trung bình như cả hai đều được xác định theo cách sau:

mean  = sum(x)/length(x) 
variance = sum((x - mean(x)).^2)/(length(x) - 1); 

Ví dụ, nếu bạn tạo ra tiếng ồn từ một phân phối chuẩn tiêu chuẩn với randn(N,1), bạn sẽ nhận được N mẫu và nếu bạn tính giá trị trung bình và phương sai, bạn sẽ nhận được khoảng 01. Vì vậy, có là tốt, phương sai của bạn cũng có thể lớn hơn mức trung bình.

Cả hai đều có ý nghĩa hoàn toàn khác: ý nghĩa cung cấp cho bạn ý tưởng trong đó pixel của bạn (nghĩa là chúng trắng, đen, 50% xám, ...). Giá trị trung bình sẽ cho bạn ý tưởng về màu điểm ảnh để chọn tổng hợp màu của hình ảnh hoàn chỉnh. Phương sai cung cấp cho bạn ý tưởng về cách giá trị pixel là spread: ví dụ: nếu giá trị pixel trung bình của bạn là 50% màu xám thì hầu hết các pixel khác cũng có màu xám 50% (phương sai nhỏ) hoặc bạn có 50 pixel đen và 50 pixel trắng (phương sai lớn) không? Vì vậy, bạn cũng có thể xem nó như là một cách để có được một ý tưởng tốt như thế nào có nghĩa là tóm tắt các hình ảnh (tức là với phương sai số không, hầu hết các thông tin được chụp bởi trung bình).

chỉnh sửa: Đối với giá trị RMS (Root Mean Square) của tín hiệu, chỉ cần làm những gì definition nói. Trong hầu hết các trường hợp, bạn muốn loại bỏ thành phần DC (tức là giá trị trung bình) trước khi tính giá trị RMS.

chỉnh sửa 2: Điều tôi quên đề cập đến là: nó cũng có ý nghĩa ít khi so sánh giá trị số của phương sai với giá trị trung bình từ một quan điểm vật lý. Giá trị trung bình có cùng kích thước với dữ liệu của bạn (trong trường hợp pixel, suy nghĩ về cường độ), trong khi phương sai có kích thước của dữ liệu bình phương (do đó cường độ^2). Độ lệch chuẩn (std trong MATLAB), là căn bậc hai của phương sai mặt khác có cùng kích thước với dữ liệu, vì vậy bạn có thể so sánh (đó là câu hỏi khác cho dù bạn nên so sánh).

+0

chính xác. Ví dụ đơn giản: 'image = [0 2]'. Giá trị trung bình là một, nhưng phương sai là hai. –

+0

Cảm ơn Egon vì lời giải thích tốt .. Bạn vui lòng giải thích cho tôi cách lấy giá trị của Square Mean Square trong MATLAB .. Tôi đang giới thiệu bài báo từ liên kết này có nghĩa là ít hơn nhiều so với phương sai http://research.ijcaonline.org/ nsc/number4/SPE046T.pdf – user1268559

5

Nếu bạn đang làm việc với hình ảnh RGB (H x W x 3), bạn phải tính toán trung bình và phương sai riêng cho từng kênh. Trong trường hợp này, pixel trung bình cũng sẽ là vectơ 3 giá trị.

for ch = 1:3 
    M(ch) = mean(reshape(img(:,:,ch),[],1)); 
    V(ch) = var(reshape(img(:,:,ch),[],1)); 
end 

MATLAB có chức năng image. Tránh sử dụng nó như một biến.