편집 : 상자 필터에 대한 설명이 매우 잘못되었습니다 (모든 가중치는 상자 필터에서 동일해야 함). 그러나 제공된 대답은 그림에서 문제를 해결합니다. 즉, 가중치의 합이 1이되도록하지 않는 오류가 발생했습니다.이미지 처리 - 상자 필터 스무딩
컴퓨터 그래픽 클래스를 사용하고 있으며 스무딩 상자 필터가 작동하는 데 문제가 있습니다. 내 시도 들어, 나는 3x3 마스크를 사용하고 소스 이미지와 convolving. 나의 책에서 주어진 공식은 분리를위한 1/(2r + 1) 및 연속을위한 1/2r로 무게를 제공한다. 여기서 r은 중심 픽셀로부터의 반지름이다. 그래서 제가
b a b
a 1 a
b a b
A는 1/3
및 B로서, 3 × 3 마스크의 각각의 값을 할당한다 하 있어요 1/((2 * SQRT (2)) +1)
인 소스 이미지로 컨볼 루션 할 수 있습니다.
내가 사용하는 특정 라이브러리는 여기에서 찾을 수있는 CImg입니다. http://cimg.sourceforge.net/ 그리고 내 소스 코드와 결과도 포함될 수 있습니다.
#include "CImg.h"
#include <cmath>
using namespace cimg_library;
int main()
{
CImg<unsigned char> image("zhbackground.bmp"), image2("zhbackground.bmp");
double a = 1.0/3.0;
double b = 1.0/((2.0*sqrt(2.0))+1.0);
CImg<> mask = CImg<>(3,3).fill(b,a,b,a,1,a,b,a,b);
image2.convolve(mask);
CImgDisplay main_disp(image,"original"), main_disp2(image2, "second");
while(1)
{
main_disp.wait();main_disp2.wait();
}
}
내가 이것을 읽었을 때 펠트 바보, 내가 그것을 고치기 위해해야하는 것을 계산하는 데 약 10 분이 걸렸을 때 더 어리 석다 고 느꼈다. 분명히 가중치를 합산하고 그 합계로 가중치를 나눕니다. – Tim
@Tim 예. 죄송합니다. 조금 더 도움이 될 수있었습니다. 그리고 자신을 때려 눕힐 필요가 없다. 나는 종종 그것이 간과되는 것이라고 생각한다. 추신 '<0.0' or '> 1.0'의 가중치가 있다면 클램핑을 추가해야합니다. –