CompStart

Pro레슨코스엘리먼트소프트웨어

CompStart

최첨단 시각효과 기술을 마스터하세요.

학습

코스레슨Pro 기능에셋소프트웨어

Tools

Tech CheckDisplay CheckMotion BlurCIE 1931PhysLightNuke Tools

회사

Instructor미션임프레숨개인정보처리방침이용약관

프로젝트

Moray RenderEXR ConverterOCIO.ccNuke ToolsDerekVFX

Follow

YouTubeInstagramTikTokThreads문의

© 2026 CompStart. All rights reserved.

중앙값 GPU

ToolSets / Filter
Filter

2026-09-07

ToolSets/filter/medianGPU.nk

필터
중앙값
GPU
깜박거리다
노이즈 제거
대청소
공익사업
View on GitHub

Blink에서 GPU 5x5 중앙값 필터를 적용하고, 중앙값과 다른 픽셀은 원본 픽셀로 유지하도록 임계값을 설정했습니다.

Median GPU는 Blink 커널(에지 클램핑된 이웃 영역)을 통해 GPU에서 구성 요소별 5×5 중앙값 연산을 수행합니다. 이는 CPU 중앙값 노드 없이도 소금-후추 노이즈 및 유사한 스파이크 노이즈를 줄이는 빠른 공간 필터입니다.

임계값 제어는 소스 픽셀과 채널별 중앙값 결과를 비교합니다. 절대 차이가 임계값과 같거나 크면 원본 픽셀이 유지되고, 임계값 미만이면 중앙값이 사용됩니다. 가장 큰 채널 차이가 마스크를 결정하므로 가장자리와 세부적인 부분이 덜 부드럽게 처리됩니다.

이미지 보정 및 클린업 단계에서 중간값 방식의 노이즈 감소를 원할 때, 필터가 이미지에 미치는 영향을 간단한 게이트로 제어할 수 있도록 사용하십시오. 더 강한 스무딩 효과를 원하면 임계값을 낮게 설정하고, 대비와 미세 구조를 보호하려면 임계값을 높게 설정하십시오.

Script code

set cut_paste_input [stack 0]
version 9.0 v7
push $cut_paste_input
Group {
 name medianGPU
 tile_color 0x421010ff
 selected true
 xpos 123
 ypos 420
 addUserKnob {20 User l medianGPU}
 addUserKnob {7 threshold R 0 0.01}
 threshold 0.00168
 addUserKnob {26 ""}
 addUserKnob {22 btn l DerekVFX.ca T "nuke.tcl('start', 'https://derekvfx.ca')" +STARTLINE}
}
 Input {
  inputs 0
  name Input
  xpos 32
  ypos -442
 }
set N3a92400 [stack 0]
 Dot {
  name Dot1
  xpos -99
  ypos -438
 }
 BlinkScript {
  ProgramGroup 1
  KernelDescription "1 \"Median5x5Kernel\" iterate componentWise 531b6be6f791b8b83e92cc6474e2f2cdcd4974e549f6e5c6a6576b9cc2f40ab7 2 \"imageIn\" Read Ranged2D \"imageOut\" Write Point 0"
  kernelSource "kernel Median5x5Kernel : public ImageComputationKernel<eComponentWise>\n\{\n  Image<eRead, eAccessRanged2D, eEdgeClamped> imageIn; \n  Image<eWrite, eAccessPoint> imageOut;          \n\n  void init()\n  \{\n    imageIn.setRange(-2, -2, 2, 2);\n  \}\n\n  void process(int2 pos)\n  \{\n    float vals\[25];\n\n    for (int j = -2, index = 0; j <= 2; j++) \{\n      for (int i = -2; i <= 2; i++, index++) \{\n        vals\[index] = imageIn(i, j);\n      \}\n    \}\n   \n    //The median function takes an array of floating-point values and an array length.\n    imageOut() = median(vals, 25);\n    \n  \}\n\};"
  rebuild ""
  name median
  xpos -133
  ypos -387
 }
set N3a93000 [stack 0]
 Viewer {
  frame 1043
  frame_range 1000-1092
  name Viewer1
  xpos -338
  ypos -273
 }
push $N3a92400
push $N3a93000
 Dot {
  name Dot2
  xpos -99
  ypos -310
 }
 MergeExpression {
  inputs 2
  temp_name0 red
  temp_expr0 "abs(Ar-Br) >= threshold ? 1 : 0"
  temp_name1 green
  temp_expr1 "abs(Ag-Bg) >= threshold ? 1 : 0"
  temp_name2 blue
  temp_expr2 "abs(Ab-Bb) >= threshold ? 1 : 0"
  temp_name3 mask
  temp_expr3 max(red,green,blue)
  expr0 "mask == 1 ? Ar : Br"
  expr1 "mask == 1 ? Ag : Bg"
  expr2 "mask == 1 ? Ab : Bb"
  expr3 mask
  name MergeExpression1
  xpos 32
  ypos -314
 }
push $N3a93000
 Output {
  name Output1
  xpos 32
  ypos -245
 }
end_group