2013-02-05 2 views
0

내 이미지를 흐리게하는 Matlab에서 함수를 만들려고합니다. Matlabs 데모 이미지 peppers.png을 사용하고 있습니다.Matlab Blur 함수를 사용하여 필터

>> img = imread('peppers.png'); 
    >> imshow(img) 
    >> imgGray = rgb2gray(img); 
    >> imshow(imgGray) 
    >> 
    >> filt1 = (1/9)*ones(3) 

     filt1 = 

     0.1111 0.1111 0.1111 
     0.1111 0.1111 0.1111 
     0.1111 0.1111 0.1111 

    >> test = myfilter(imgGray, filt1); 
    >> imshow(test) 

성공적 회색으로 컬러 이미지를 변환하고 필터를 적용합니다 : 여기

function g = myfilter(f, h) 

    f = double(f); %convert to double 
    g = zeros(size(f)); %new array (size of f) 
    a = (size(h, 1) - 1)/2; %padding on edges 

    for row = (a + 1) : (size(f,1) - a) 
     for col = (a + 1) : (size(f,2) - a) 

      gxy = 0; %running sum 

      for m = -a:a 
       for n = -a:a 

        gxy = gxy + f(row - m, col - n) + h(m + a+1, n + a+1); 
       end 
      end 

      g(row, col) = gxy; 
     end 
    end 

    g = uint8(g); %convert back to int 

내 명령입니다 :

여기 내 기능입니다.

불행히도 필터는 거의 완벽한 흰색 이미지 (너무 밝음)를 만듭니다 ... 나는 왜 그런지 알 수 없습니다 ... 3x3 필터를 사용하여 각 픽셀의 평균을 취해야합니다 ... 아무거나 이 일이 왜 일어나고 있는지 당신네들에게 분명합니까?

답변

0

단순한 오타가 있습니다.

gxy = gxy + f(row-m, col-n) + h(m+a+1, n+a+1);

가되어야한다 gxy = gxy + f(row-m, col-n) * h(m+a+1, n+a+1);.

제대로 작동하고 흐린 이미지가 생성됩니다.

fh을 곱하는 대신 위의 코드에서 합산되어 2D 컨볼 루션으로 정의 된 공간 도메인 이미지 필터를 따르지 않습니다. Matlab은 함수가 올바르게 실행되었지만 필터가 다른 산술 연산자로 올바르게 작동하더라도 예외 (또는 예기치 않은 결과)가 발생했습니다.

문제가 해결되었습니다.

2

MATLAB의 conv2 기능을 확인해야합니다. conv2에서 추출한 2D 컨볼 루션에 대한 다음 함수는 주어진 필터에서 효과적입니다.

function c = myfilter(a, b) 
[ma, na] = size(a); 
[mb, nb] = size(b); 
c = zeros(ma+mb-1, na+nb-1); 
    for i = 1:mb 
     for j = 1:nb 
      r1 = i; 
      r2 = r1 + ma - 1; 
      c1 = j; 
      c2 = c1 + na - 1; 
      c(r1:r2,c1:c2) = c(r1:r2,c1:c2) + b(i,j) * a; 
     end 
    end 
c = uint8(c) 
관련 문제