OpenGL을 사용하는 경우 설명하는대로 편집 또는 처리를 적용 할 이미지의 부분 인 ROI (관심 영역)를 정의 할 수 있습니다. 당신이 경로를 이동하는 경우
이 당신의 OpenGL ES를 사용하여 선택한 픽셀 이웃 반경에서 평균 2.0/3.0 계산 방법은 다음과 같습니다
kernel vec4 medianUnsharpKernel(sampler u) {
vec4 pixel = unpremultiply(sample(u, samplerCoord(u)));
vec2 xy = destCoord();
int radius = 3;
int bounds = (radius - 1)/2;
vec4 sum = vec4(0.0);
for (int i = (0 - bounds); i <= bounds; i++)
{
for (int j = (0 - bounds); j <= bounds; j++)
{
sum += unpremultiply(sample(u, samplerTransform(u, vec2(xy + vec2(i, j)))));
}
}
vec4 mean = vec4(sum/vec4(pow(float(radius), 2.0)));
float mean_avg = float(mean);
float comp_avg = 0.0;
vec4 comp = vec4(0.0);
vec4 median = mean;
for (int i = (0 - bounds); i <= bounds; i++)
{
for (int j = (0 - bounds); j <= bounds; j++)
{
comp = unpremultiply(sample(u, samplerTransform(u, vec2(xy + vec2(i, j)))));
comp_avg = float(comp);
median = (comp_avg < mean_avg) ? max(median, comp) : median;
}
}
return premultiply(vec4(vec3(abs(pixel.rgb - median.rgb)), 1.0));
}
단계에 대한 간략한 설명을 1을 계산 3x3 근방에서 소스 픽셀을 에워싸는 픽셀의 값의 평균; 2. 같은 이웃에서 평균보다 작은 모든 픽셀의 최대 픽셀 값을 찾습니다. 3. [선택 사항] 가장자리 감지를 위해 원본 픽셀 값에서 중간 픽셀 값을 뺍니다.
가장자리 감지에 중간 값을 사용하는 경우 위의 코드를 수정하여 하이브리드 중간 필터링 및 잘린 미디어 필터링 (더 나은 '모드'필터링). 관심이 있으시면, 물어보십시오.
OpenGL 또는 OpenCL (또는 CUDA)을 의미합니까? OpenGL 렌더링과 관련된 작업이 엄격히 필요하지 않은 경우 나중에 더 나은 것일 수도 있습니다. – Mailerdaimon
OpenGL 만 가능합니다. OpenGL ES 2.0이 이상적입니다. –
새 이미지를 만들려는 목적이이 위치를 각 픽셀의 오프셋으로 사용하여 원본에서 리샘플링됩니까? – GuyRT