읽기 전에 을 꼭 읽어주세요. 감사합니다!
컨볼루션에 관해서는 이전 글에서 이미 언급한 바 있습니다. 이해가 안 되시면 이전 글을 읽어보시면 됩니다.
제목을 보고 똑똑한 아이들은 그들의 직접적인 관계를 이해해야 합니다. Convolution 연산은 서로 다른 템플릿(Mask)을 사용하여 서로 다른 결과를 얻을 수 있습니다. Convolution 연산이 먼저 구현됩니다.
코드는 다음과 같습니다.
public void filter(double[][] mask) { toGray();//灰度化 int mh = mask.length; int mw = mask[1].length; int sh = (mh+1)/2; int sw = (mw+1)/2; double maskSum = math.sum(mask); int[] d= new int[w*h]; for(int i=(mh-1)/2+1;i<h-(mh-1)/2;i++){ for(int j=(mw-1)/2+1;j<w-(mw-1)/2;j++){ int s = 0; for(int m=0; m<mh ; m++){ for(int n=0;n<mw;n++){ s = s + (int)(mask[m] *this.data[j+n-sw +(i+m-sh)*w]); } } if(maskSum != 0) s /= maskSum; if(s < 0) s =0; if(s > 255) s = 255; d[j + i * w] = s; } } this.data = d; }
가우스 커널에 의해 생성된 가우스 템플릿의 경우 다음과 같습니다.
실행 결과는 각각, 오른쪽은 Gaussian 7*7 템플릿에서 생성된 결과입니다.
샤프닝 템플릿:
실행 결과:
라플라시안 연산자:
실행 결과:
위 내용은 Java 이미지 컨볼루션 연산, 가우시안 블러, 라플라시안 연산자에 대한 내용입니다. PHP 중국어 웹사이트(m.sbmmt.com)!