Matlab 이미지 처리 "주파수 필터"(2D FFT)

첫 투고입니다. 대전 잘 부탁드립니다.

이미지 처리에는 다양한 방법이 있지만, 이 기사에서 소개하는 것은 주파수 필터 처리입니다.

원래 모르겠어! 라고 사람은 이쪽의 기사가 참고가 될까 생각합니다.
htps //w w.ゔぃs こーち ch. 코 m / 네 ws 파페 r / 코 엠 / 싶은 l20 /

matlab에서 구현할 수 있었으므로 소개합니다.

이번에 구현한 것은 로우 패스 필터입니다. 즉 고주파 노이즈(점과 같이 좁은 영역에서의 노이즈)를 제거합니다.

출력
왼쪽이 필터 전, 오른쪽이 필터 후(전달하기 어려운…)


세 가지 함수로 정리했으므로,
%%% 여기에서 아래를 copipe%%%이하를 copipe하면 바로 사용할 수 있다고 생각합니다.

함수 설명

①function [pic2] = FFTfilter(pic1,Gain)
②function[pic2] = OddEsc(pic1)
③function [pic2] =PicConv(pic1)

①은 이름대로 FFT 계산을 하는 개소입니다.
계산의 편의상, 이미지의 사이즈가 홀수였던 경우 픽셀을 추가해 짝수로 하고 있습니다. 그 처리를 함수②에 던지고 있습니다.
주파수 영역의 트리밍을 할 때, 화상의 사분면을 반대로 하면 편리함이 좋으므로, ③에서 그 처리를 하고 있습니다.

참고:
니시즈미 공방님( htps : // / l hr thm. 조호.んふぉ / 이마 게 p 로세신 g / 후 우리 r t 란 s 후 rm / )

편리한 곳
색상, 흑백에 관계없이 변환할 수 있습니다.
FFTGain(0~1)의 조정(0에 가까울수록 필터가 강해집니다.)를 할 수 있습니다.

단점
하이 패스 필터, 밴드 패스 필터의 능력은 없습니다.
만약 추가한다면
if i < sz1/2-a || i > sz1/2+a || j < sz2/2-b || j > sz2/2+b

의 부분이 주파수 트리밍에 대응하고 있으므로 여기의 조건을 바꾸어 주십시오.

이미지 사이즈가 홀수였을 때 추가하는 처리를 하기 때문에 우단(혹은 하단)의 1열에 휘도 제로의 영역이 생기는 일이 있습니다.

아래 샘플 코드
%%%画像の読み込み%%%
test = imread("C:\hogehoge\test.jpg");

%%%フィルタ処理(0.1はフィルタ透過率)%%%
FFTGain = 0.1 
test2 = FFTfilter(test,FFTGain);

%%%出力%%%
subplot(1,2,1)
imshow(test)
subplot(1,2,2)
imshow(test2)
imwrite(test2,"C:\hogehoge\test2.jpg")


%%%ここから下をコピペする%%%
function [pic2] = FFTfilter(pic1,Gain)
pic1 = OddEsc(pic1);

sz1 = size(pic1,1);
sz2 = size(pic1,2);
sz3 = size(pic1,3);

ftest=fft2(pic1);
ftest=PicConv(ftest);
a = ceil(sz1*Gain);
b = ceil(sz2*Gain);

for k =1:sz3
    for j=1:sz2
        for i=1:sz1
            if i < sz1/2-a || i > sz1/2+a || j < sz2/2-b || j > sz2/2+b
            ftest(i,j,k) = 0;
            end
        end
    end
end

ftest = PicConv(ftest);
pic2 = real(ifft2(ftest))/255;


end

function[pic2] = OddEsc(pic1)
sz1 = size(pic1,1);
sz2 = size(pic1,2);
sz3 = size(pic1,3);

if rem(sz1,2)==1
    sz1 = sz1+1;
    pic1(sz1,sz2,sz3) = 0;
end

if rem(sz2,2)==1
    sz2 = sz2+1;
    pic1(sz1,sz2,sz3) = 0;
end

pic2 = pic1;

end

function [pic2] =PicConv(pic1)
a = size(pic1,1);
b = size(pic1,2);
c = size(pic1,3);
pic2 = zeros(a,b,c);

pic2(1:a/2,1:b/2,:) = pic1(a/2+1:a,b/2+1:b,:);
pic2(a/2+1:a,1:b/2,:) = pic1(1:a/2,b/2+1:b,:);
pic2(1:a/2,b/2+1:b,:) = pic1(a/2+1:a,1:b/2,:);
pic2(a/2+1:a,b/2+1:b,:) = pic1(1:a/2,1:b/2,:);

end


간섭계의 간섭 줄무늬 노이즈 제거 등에 사용해 보십시오. 그럼.

좋은 웹페이지 즐겨찾기