#@gui moire_remove_only: moire_remove_only,moire_remove_only(0) #@gui : Starting pattern = choice(0,"Red-Green","Blue-Green","Green-Red","Green-Blue") #@gui : tile size = int (128,64,512) moire_remove_only: bayer_pattern=$1 tile_size=$2 -rgb2bayer[-1] $bayer_pattern,1 # convert greyscale raw image into RGB --moire_remove_horizontal[0] $bayer_pattern,1 # demosaic by interpolating green horizontally only -moire_remove_vertical[0] $bayer_pattern # demosaic by interpolating green vertically only -iain_min_fft4[0,1] $2 # break images into tiles, apply a FFT, keep the minimum FFT value from one image or the other, combine tiles. #@gui moire_remove_horizontal: moire_remove_horizontal,moire_remove_horizontal(0) #@gui : Starting pattern = choice(0,"Red-Green","Blue-Green","Green-Red","Green-Blue") moire_remove_horizontal: -rgb2bayer[-1] $1,1 --l[0] -channels 1 (0.5,1,0.5) -convolve[0] [1] -rm[1] -endl -c 0,255 -split[0] c -reverse[1,3] -rm[3] -sub[0] [1] -sub[2] [1] -add[0,2] 255 -rgb2bayer[0,2] $1,1 -channels[0] 0 -channels[2] 2 -l[0] (.25,.5,.25;.5,1,.5;.25,.5,.25) -convolve[0] [1] -rm[1] -endl -l[2] (.25,.5,.25;.5,1,.5;.25,.5,.25) -convolve[0] [1] -rm[1] -endl -sub[0,2] 255 -add[0] [1] -add[2] [1] ## -reverse[1,2] -append c -c 0,255 #@gui moire_remove_vertical: moire_remove_vertical,moire_remove_vertical(0) #@gui : Starting pattern = choice(0,"Red-Green","Blue-Green","Green-Red","Green-Blue") moire_remove_vertical: -rgb2bayer[0] $1,1 --l[0] -channels 1 (0.5;1;0.5) -convolve[0] [1] -rm[1] -endl -c 0,255 -split[0] c -reverse[1,3] -rm[3] -sub[0] [1] -sub[2] [1] -add[0,2] 255 -rgb2bayer[0,2] $1,1 -channels[0] 0 -channels[2] 2 -l[0] (.25,.5,.25;.5,1,.5;.25,.5,.25) -convolve[0] [1] -rm[1] -endl -l[2] (.25,.5,.25;.5,1,.5;.25,.5,.25) -convolve[0] [1] -rm[1] -endl -sub[0,2] 255 -add[0] [1] -add[2] [1] ## -reverse[1,2] -append c -c 0,255 #@gui iain_min_fft4: iain_min_fft4,iain_min_fft4(0) #@gui : size = int (128,64,512) iain_min_fft4: -append z # stack images for convenience tile_size=$1 overlap=16 cropwidth={w} cropheight={h} # create overlapping tiles -if {$cropwidth%$tile_size>0} -resize[0] {w+($tile_size-w%$tile_size)},100%,{d},{s},0,3 -endif -if {$cropheight%$tile_size>0} -resize[0] 100%,{h+($tile_size-h%$tile_size)},{d},{s},0,3 -endif h_tiles={w/$tile_size} v_tiles={h/$tile_size} -repeat $v_tiles v_count=$> -repeat $h_tiles h_count=$> --crop[0] {($h_count*$tile_size)-$overlap},{($v_count*$tile_size)-$overlap},{($h_count*$tile_size)+($tile_size+$overlap-1)},{($v_count*$tile_size)+($tile_size+$overlap-1)},1 -done -done -rm[0] # once tiles are split find minimum FFT for each tile pair -apply_parallel " -l[0] -split z -rgb2yuv -fftpolar -min[0,2] -min[1,2] -ifftpolar -yuv2rgb -endl " # combine tiles -repeat $! -l[$>] -crop $overlap,$overlap,{$tile_size+$overlap-1},{$tile_size+$overlap-1} -endl -done -append_tiles $h_tiles,$v_tiles -crop 0,0,{$cropwidth-1},{$cropheight-1}