2011-08-02 5 views
1

Matlab 내에서 알려진 분산이있는 이미지에 노이즈가 추가됩니다. 나는 다음과 같이 그렇게 할 수 있다는 사실을 알고 :Matlab을 사용하여 이미지의 노이즈 분산 추정

var = 0.01; 
i = im2double(imread('lena.bmp')); 
i_n = imnoise(i, 'gaussian',0,var); 

분명히 결과 이미지 노이즈가 있습니다. 나는 하이 패스 필터의 평균을 계산하여 잡음 분산을 추정하려고하지만, 난 정말 내가 분산을 추정 감사

k = [1 4 6 4 1]'*[1 4 6 4 1]; 
kk = k ./sum(sum(k)); 

var_est = median(median(abs(i_n - imfilter(i_n,kk)))) 

    var_est(:,:,1) = 

    0.0631 


    var_est(:,:,2) = 

    0.0620 


    var_est(:,:,3) = 

    0.0625 

어려운 문제가 어떤 상관 관계를 보이지 않아요,하지만 난 그냥 싶어 합리적으로 가까운 결과, 예. 50 % 오류는 허용됩니다. 내가 뭘 잘못하고 있니?

+1

이 수식이 실제로 필요한 것인지 확신하지 못합니다. 당신이 그것을 발견 한 출처를 제공 할 수 있습니까? 신문에 있었나요? – Phonon

+0

@Phonon - 지금 참조를 찾고 있는데, 나는 그 책을 한동안 읽었다는 것을 확신합니다. 직관적으로 나는 그것이 의미가 있다고 생각했습니다. 즉, 하이 패스 필터링을 한 후에 노이즈가 발생하고 노이즈가 많아지면 노이즈가 양을 지배하기 때문에 평균은 노이즈 분산의 합리적인 추정이어야합니다. – trican

+0

아하 문제가 무엇인지 깨달았습니다. 1/0.675의 추가 배율 인수가 있어야합니다 - 그 다음 매우 합리적인 esimtate 0.00926 – trican

답변

2

imnoise를 사용할 때 모든 주파수에서 구성 요소를 나타내는 근사 버전의 백색 잡음을 실제로 추가하기 때문에이 경우 부적절합니다. 하이 패스 필터를 사용할 때 노이즈의 주파수 성분을 클리핑하므로 추정의 정확도가 떨어집니다.

실제로 언급 한 것처럼 하나의 이미지로만 노이즈를 추정하는 것은 간단한 문제가 아닙니다. 그러나 몇 가지 접근법이 있습니다. 예를 들어 median absolute deviation을 사용하면 데이터의 분산 (이 경우 커널의 픽셀 강도)을 구할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 그러나 나는 아직도 내가 얻는 대답에 대해 확신하지 못한다. 내가 너를 올바르게 이해했다고 가정하면 다음과 같이했다 : i_median (:, :, 1) = medfilt2 (i_n (:, :, 1)); i_median (:, :, 2) = medfilt2 (i_n (:, :, 2)); i_median (:, :, 3) = medfilt2 (i_n (:, :, 3)); var_est = 중간 값 (중간 값 (중간 값 (abs (i_n - i_median)))). 이것은 0.0590의 답을 준다 - 이것은 옳지 않은 것인가? – trican

1

하이 패스 필터링 된 분산을 계산할 수 있습니다 영상. Variable을 계산하는 Matlab 함수의 이름이기 때문에 변수 이름에 var을 사용하지 마십시오.

v = var; % use v instead of var for your variance variable 
clear var; % clear your variable "var" so we can use the var function 
est_variance = var(reshape(i_n - imfilter(i_n,kk), [], 1)); 
+0

응답 kristi 주셔서 감사합니다 - 내가 분명히 뭔가를 잘못하고있어 내가 위의 노력을 얻을 때 est_variance = 199.0065?!? 유일한 변경 사항은 uint8에서 이미지를 열고 variance 명령, 즉 est_variance = var (double (reshape (i_n - imfilter (i_n, kk), [], 1))) 이전에 이중 변환을 수행하는 것입니다. . 그것은 위와 같이 im2double을 사용하여 재 시도했다고 말했고 나는 0.0085를 얻었습니다. 특히 @msotaquira가 위에 언급 한 점을 고려하면 옳습니다. – trican

관련 문제