참조 편집이상한 행동을 할 때 큰 반경을 사용하여 이미지를 흐리게 가우스/표준 편차
내가 사용하는 대신 MATLAB에 내 자신에 가우스 흐림 알고리즘을 구현하기 위해 노력 내장 된 알고리즘을 이해하는 이유 상세히.
나는 interesting implementation을 발견했으며 누군가 이미 문의했습니다. how to code that kind of algorithm. 그래서 그것은 사업이 아닙니다.
이 또한 내가 GIMP처럼 주어진 반경의 표준 편차를 계산하려면 다음 수식을 사용하지 :
stdDeviation = sqrt(-(radius^2)/(2*log10(1/255)));
내 알고리즘은 반경의 작은 값에 대한 작업 (예 : 3,5,7) 아무 문제없이 (당신을 차이를 최소한으로 볼 수는 없습니다.) 난 (21)의 반경 화상 흐림하려고하면, 출력은 다음과 같다 : 분명히
: imgaussfilt(A,sigma)
출력 GIMP's/MATLAB's 비교
알고리즘은 동일한 (또는 적어도 유사한) 출력 이미지를 계산하지 않습니다. GIMP/MATLAB의 imgaussfilt(A,sigma)
은 무엇을 의미합니까?
이미지의 경계가 무시 될 수 있습니다. 나는 그 문제를 알고있다. 하지만 내 출력 이미지에의 '이상한 픽셀 줄무늬'인 의 출처를 이해하지 못했습니다.
function y = gaussianBlurSepTest(inputImage)
% radius in pixel; RADIUS MUST BE ODD!
radius = 21;
% approximate value for standard deviation
stdDeviation = sqrt(-(radius^2)/(2*log10(1/255)));
ind = -floor(radius/2):floor(radius/2);
[X, Y] = meshgrid(ind, ind);
h = exp(-(X.^2 + Y.^2)/(2*stdDeviation*stdDeviation));
h = h/sum(h(:));
redChannel = inputImage(:,:,1);
greenChannel = inputImage(:,:,2);
blueChannel = inputImage(:,:,3);
redBlurred = conv2(redChannel, h);
greenBlurred = conv2(greenChannel, h);
blueBlurred = conv2(blueChannel, h);
y = cat(3, uint8(redBlurred), uint8(greenBlurred), uint8(blueBlurred));
편집 :
완성도를 위해서다른 사람들을 도울 수 :
완성도의 이유로, 여기에 소스 코드 내가 erfan's 수정을 적용했다. 결과는 훨씬 나아졌지만 여전히 김프의 계산과 명백한 차이가 있습니다. 김프의 결과는 '더 부드럽게'보입니다.
구현 된 알고리즘 :
function y = gaussianBlurSepTest(inputImage)
radius = 21;
stdDeviation = sqrt(-(radius^2)/(2*log10(1/255)));
ind = -floor(radius/2):floor(radius/2);
[X, Y] = meshgrid(ind, ind);
[~, R] = cart2pol(X, Y); % Here R is defined
h = exp(-R.^2/(2*stdDeviation*stdDeviation));
h = h/sum(h(:));
h(R > radius/2) = 0;
h = h/sum(h(:));
redChannel = inputImage(:,:,1);
greenChannel = inputImage(:,:,2);
blueChannel = inputImage(:,:,3);
redBlurred = conv2(redChannel, h);
greenBlurred = conv2(greenChannel, h);
blueBlurred = conv2(blueChannel, h);
y = cat(3, uint8(redBlurred), uint8(greenBlurred), uint8(blueBlurred));
완전히 질문에 대답 측면에서 같은 질문에 다른 사람들을 돕기 위해 나는 그것이 차이의 기원을 묻는 것이 유용 할 것이라고 생각한다.
감사합니다.