CompStart

ProAulasCursosElementosSoftware

CompStart

Domine efeitos visuais com técnicas de ponta.

Aprendizado

CursosLiçõesRecursos ProRecursosSoftware

Tools

Tech CheckDisplay CheckMotion BlurCIE 1931PhysLightNuke Tools

Empresa

InstructorMissãoImpressumPrivacidadeTermos

Projetos

Moray RenderEXR ConverterOCIO.ccNuke ToolsDerekVFX

Follow

YouTubeInstagramTikTokThreadsContato

© 2026 CompStart. Todos os direitos reservados.

GPU mediana

ToolSets / Filter
Filter

2026-09-07

ToolSets/filter/medianGPU.nk

filtro
mediana
GPU
piscar
reduzir ruído
limpar
utilidade
View on GitHub

Filtro de mediana 5×5 na GPU em Blink, com um limite que mantém os pixels originais onde eles diferem da mediana.

O Median GPU executa uma mediana 5×5 por componente na GPU através de um kernel Blink (vizinhança com bordas limitadas). É um filtro espacial rápido para reduzir ruídos de pico semelhantes, como o ruído sal e pimenta, sem a necessidade de um nó de mediana na CPU.

Um controle de limiar compara a fonte com o resultado mediano por canal. Quando a diferença absoluta atinge ou excede o limiar, o pixel original é mantido; quando permanece abaixo, o valor mediano é utilizado. A maior diferença entre os canais define a máscara, de modo que bordas e detalhes mais nítidos têm menor probabilidade de serem suavizados.

Use-o nas etapas de embelezamento e limpeza quando desejar uma redução de ruído no estilo mediana, com um controle simples sobre o quanto o filtro pode alterar a imagem. Ajuste o limite para um valor baixo para uma suavização mais intensa e para um valor mais alto para preservar o contraste e os detalhes da imagem.

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