i'm trying make gaussian blur without using library. when change σ 5, results in error because value more 255. use this reference. know equation wrong, see values reference. use equation wiki.
when use same σ reference 5.5, same result values on link. when try change 5, value got more 255. maybe it's not 5. re-read code on , on again. or maybe messed formula ? should below 255 right? s here's code formula
public function standard_deviation(sigma double) dim standard_deviasi double = 1 / (2 * math.pi * (sigma ^ 2)) return standard_deviasi end function public function hitung_exponen(x integer, y integer, sigma double) 'dim exp_den double = 2 * (sigma ^ 2) 'dim a45roote2 double = math.pow(math.exp(x ^ 2 + y ^ 2), 1 / exp_den) 'dim exponen double = 1 / a45roote2 dim exponen double = math.exp(-((x ^ 2) + (y ^ 2) / 2 * sigma ^ 2)) return exponen end function
and here main func
dim standar_deviasi double = standard_deviation(sigma) kernelgauss(0, 0) = standar_deviasi * hitung_exponen(2, 2, sigma) kernelgauss(0, 1) = standar_deviasi * hitung_exponen(1, 2, sigma) kernelgauss(0, 2) = standar_deviasi * hitung_exponen(0, 2, sigma) kernelgauss(0, 3) = standar_deviasi * hitung_exponen(1, 2, sigma) kernelgauss(0, 4) = standar_deviasi * hitung_exponen(2, 2, sigma) kernelgauss(1, 0) = standar_deviasi * hitung_exponen(2, 1, sigma) kernelgauss(1, 1) = standar_deviasi * hitung_exponen(1, 1, sigma) kernelgauss(1, 2) = standar_deviasi * hitung_exponen(0, 1, sigma) kernelgauss(1, 3) = standar_deviasi * hitung_exponen(1, 1, sigma) kernelgauss(1, 4) = standar_deviasi * hitung_exponen(2, 1, sigma) kernelgauss(2, 0) = standar_deviasi * hitung_exponen(2, 0, sigma) kernelgauss(2, 1) = standar_deviasi * hitung_exponen(1, 0, sigma) kernelgauss(2, 2) = standar_deviasi * hitung_exponen(0, 0, sigma) kernelgauss(2, 3) = standar_deviasi * hitung_exponen(1, 0, sigma) kernelgauss(2, 4) = standar_deviasi * hitung_exponen(2, 0, sigma) kernelgauss(3, 0) = standar_deviasi * hitung_exponen(2, 1, sigma) kernelgauss(3, 1) = standar_deviasi * hitung_exponen(1, 1, sigma) kernelgauss(3, 2) = standar_deviasi * hitung_exponen(0, 1, sigma) kernelgauss(3, 3) = standar_deviasi * hitung_exponen(1, 1, sigma) kernelgauss(3, 4) = standar_deviasi * hitung_exponen(2, 1, sigma) kernelgauss(4, 0) = standar_deviasi * hitung_exponen(2, 2, sigma) kernelgauss(4, 1) = standar_deviasi * hitung_exponen(1, 2, sigma) kernelgauss(4, 2) = standar_deviasi * hitung_exponen(0, 2, sigma) kernelgauss(4, 3) = standar_deviasi * hitung_exponen(1, 2, sigma) kernelgauss(4, 4) = standar_deviasi * hitung_exponen(2, 2, sigma) 'sums kernel dim sums_kernel double = 0 rowkernel integer = 0 kernelgauss.getupperbound(0) columnkernel integer = 0 kernelgauss.getupperbound(1) sums_kernel += kernelgauss(rowkernel , columnkernel ) next next rowkernel integer = 0 kernelgauss.getupperbound(0) columnkernel integer = 0 kernelgauss.getupperbound(1) kernelgauss(rowkernel , kolomkernel) = kernelgauss(rowkernel , columnkernel ) / sums_kernel next next 'start gauss x integer = 2 w_gambar - 2 y integer = 2 h_gambar - 2 '1st row 'channel r dim barispertamakolom1_r double barispertamakolom1_r = map_pikselr(x - 2, y + 2) * kernelgauss(0, 0) dim barispertamakolom2_r double barispertamakolom2_r = map_pikselr(x - 1, y + 2) * kernelgauss(0, 1) dim barispertamakolom3_r double barispertamakolom3_r = map_pikselr(x, y + 2) * kernelgauss(0, 2) dim barispertamakolom4_r double barispertamakolom4_r = map_pikselr(x + 1, y + 2) * kernelgauss(0, 3) dim barispertamakolom5_r double barispertamakolom5_r = map_pikselr(x + 2, y + 2) * kernelgauss(0, 4) dim barispertama_r double barispertama_r = barispertamakolom1_r + barispertamakolom2_r + barispertamakolom3_r + barispertamakolom4_r + barispertamakolom5_r 'channel g dim barispertamakolom1_g double barispertamakolom1_g = map_pikselr(x - 2, y + 2) * kernelgauss(0, 0) dim barispertamakolom2_g double barispertamakolom2_g = map_pikselr(x - 1, y + 2) * kernelgauss(0, 1) dim barispertamakolom3_g double barispertamakolom3_g = map_pikselr(x, y + 2) * kernelgauss(0, 2) dim barispertamakolom4_g double barispertamakolom4_g = map_pikselr(x + 1, y + 2) * kernelgauss(0, 3) dim barispertamakolom5_g double barispertamakolom5_g = map_pikselr(x + 2, y + 2) * kernelgauss(0, 4) dim barispertama_g double barispertama_g = barispertamakolom1_g + barispertamakolom2_g + barispertamakolom3_g + barispertamakolom4_g + barispertamakolom5_g 'channel b dim barispertamakolom1_b double barispertamakolom1_b = map_pikselr(x - 2, y + 2) * kernelgauss(0, 0) dim barispertamakolom2_b double barispertamakolom2_b = map_pikselr(x - 1, y + 2) * kernelgauss(0, 1) dim barispertamakolom3_b double barispertamakolom3_b = map_pikselr(x, y + 2) * kernelgauss(0, 2) dim barispertamakolom4_b double barispertamakolom4_b = map_pikselr(x + 1, y + 2) * kernelgauss(0, 3) dim barispertamakolom5_b double barispertamakolom5_b = map_pikselr(x + 2, y + 2) * kernelgauss(0, 4) dim barispertama_b double barispertama_b = barispertamakolom1_b + barispertamakolom2_b + barispertamakolom3_b + barispertamakolom4_b + barispertamakolom5_b '2nd row 'channel r dim bariskeduakolom1_r double bariskeduakolom1_r = map_pikselr(x - 2, y + 1) * kernelgauss(1, 0) dim bariskeduakolom2_r double bariskeduakolom2_r = map_pikselr(x - 1, y + 1) * kernelgauss(1, 1) dim bariskeduakolom3_r double bariskeduakolom3_r = map_pikselr(x, y + 1) * kernelgauss(1, 2) dim bariskeduakolom4_r double bariskeduakolom4_r = map_pikselr(x + 1, y + 1) * kernelgauss(1, 3) dim bariskeduakolom5_r double bariskeduakolom5_r = map_pikselr(x + 2, y + 1) * kernelgauss(1, 4) dim bariskedua_r double bariskedua_r = bariskeduakolom1_r + bariskeduakolom2_r + bariskeduakolom3_r + bariskeduakolom4_r + bariskeduakolom5_r 'channel g dim bariskeduakolom1_g double bariskeduakolom1_g = map_pikselr(x - 2, y + 1) * kernelgauss(1, 0) dim bariskeduakolom2_g double bariskeduakolom2_g = map_pikselr(x - 1, y + 1) * kernelgauss(1, 1) dim bariskeduakolom3_g double bariskeduakolom3_g = map_pikselr(x, y + 1) * kernelgauss(1, 2) dim bariskeduakolom4_g double bariskeduakolom4_g = map_pikselr(x + 1, y + 1) * kernelgauss(1, 3) dim bariskeduakolom5_g double bariskeduakolom5_g = map_pikselr(x + 2, y + 1) * kernelgauss(1, 4) dim bariskedua_g double bariskedua_g = bariskeduakolom1_g + bariskeduakolom2_g + bariskeduakolom3_g + bariskeduakolom4_g + bariskeduakolom5_g 'channel b dim bariskeduakolom1_b double bariskeduakolom1_b = map_pikselr(x - 2, y + 1) * kernelgauss(1, 0) dim bariskeduakolom2_b double bariskeduakolom2_b = map_pikselr(x - 1, y + 1) * kernelgauss(1, 1) dim bariskeduakolom3_b double bariskeduakolom3_b = map_pikselr(x, y + 1) * kernelgauss(1, 2) dim bariskeduakolom4_b double bariskeduakolom4_b = map_pikselr(x + 1, y + 1) * kernelgauss(1, 3) dim bariskeduakolom5_b double bariskeduakolom5_b = map_pikselr(x + 2, y + 1) * kernelgauss(1, 4) dim bariskedua_b double bariskedua_b = bariskeduakolom1_b + bariskeduakolom2_b + bariskeduakolom3_b + bariskeduakolom4_b + bariskeduakolom5_b '3rd row 'channel r dim barisketigakolom1_r double barisketigakolom1_r = map_pikselr(x - 2, y) * kernelgauss(2, 0) dim barisketigakolom2_r double barisketigakolom2_r = map_pikselr(x - 1, y) * kernelgauss(2, 1) dim barisketigakolom3_r double barisketigakolom3_r = map_pikselr(x, y) * kernelgauss(2, 2) dim barisketigakolom4_r double barisketigakolom4_r = map_pikselr(x + 1, y) * kernelgauss(2, 3) dim barisketigakolom5_r double barisketigakolom5_r = map_pikselr(x + 2, y) * kernelgauss(2, 4) dim barisketiga_r double barisketiga_r = barisketigakolom1_r + barisketigakolom2_r + barisketigakolom3_r + barisketigakolom4_r + barisketigakolom5_r 'channel g dim barisketigakolom1_g double barisketigakolom1_g = map_pikselr(x - 2, y) * kernelgauss(2, 0) dim barisketigakolom2_g double barisketigakolom2_g = map_pikselr(x - 1, y) * kernelgauss(2, 1) dim barisketigakolom3_g double barisketigakolom3_g = map_pikselr(x, y) * kernelgauss(2, 2) dim barisketigakolom4_g double barisketigakolom4_g = map_pikselr(x + 1, y) * kernelgauss(2, 3) dim barisketigakolom5_g double barisketigakolom5_g = map_pikselr(x + 2, y) * kernelgauss(2, 4) dim barisketiga_g double barisketiga_g = barisketigakolom1_g + barisketigakolom2_g + barisketigakolom3_g + barisketigakolom4_g + barisketigakolom5_g 'channel b dim barisketigakolom1_b double barisketigakolom1_b = map_pikselr(x - 2, y) * kernelgauss(2, 0) dim barisketigakolom2_b double barisketigakolom2_b = map_pikselr(x - 1, y) * kernelgauss(2, 1) dim barisketigakolom3_b double barisketigakolom3_b = map_pikselr(x, y) * kernelgauss(2, 2) dim barisketigakolom4_b double barisketigakolom4_b = map_pikselr(x + 1, y) * kernelgauss(2, 3) dim barisketigakolom5_b double barisketigakolom5_b = map_pikselr(x + 2, y) * kernelgauss(2, 4) dim barisketiga_b double barisketiga_b = barisketigakolom1_b + barisketigakolom2_b + barisketigakolom3_b + barisketigakolom4_b + barisketigakolom5_b '4th row 'channel r dim bariskeempatkolom1_r double bariskeempatkolom1_r = map_pikselr(x - 2, y + 1) * kernelgauss(3, 0) dim bariskeempatkolom2_r double bariskeempatkolom2_r = map_pikselr(x - 1, y + 1) * kernelgauss(3, 1) dim bariskeempatkolom3_r double bariskeempatkolom3_r = map_pikselr(x, y + 1) * kernelgauss(3, 2) dim bariskeempatkolom4_r double bariskeempatkolom4_r = map_pikselr(x + 1, y + 1) * kernelgauss(3, 3) dim bariskeempatkolom5_r double bariskeempatkolom5_r = map_pikselr(x + 2, y + 1) * kernelgauss(3, 4) dim bariskeempat_r double bariskeempat_r = bariskeempatkolom1_r + bariskeempatkolom2_r + bariskeempatkolom3_r + bariskeempatkolom4_r + bariskeempatkolom5_r 'channel g dim bariskeempatkolom1_g double bariskeempatkolom1_g = map_pikselr(x - 2, y + 1) * kernelgauss(3, 0) dim bariskeempatkolom2_g double bariskeempatkolom2_g = map_pikselr(x - 1, y + 1) * kernelgauss(3, 1) dim bariskeempatkolom3_g double bariskeempatkolom3_g = map_pikselr(x, y + 1) * kernelgauss(3, 2) dim bariskeempatkolom4_g double bariskeempatkolom4_g = map_pikselr(x + 1, y + 1) * kernelgauss(3, 3) dim bariskeempatkolom5_g double bariskeempatkolom5_g = map_pikselr(x + 2, y + 1) * kernelgauss(3, 4) dim bariskeempat_g double bariskeempat_g = bariskeempatkolom1_g + bariskeempatkolom2_g + bariskeempatkolom3_g + bariskeempatkolom4_g + bariskeempatkolom5_g 'channel b dim bariskeempatkolom1_b double bariskeempatkolom1_b = map_pikselr(x - 2, y + 1) * kernelgauss(3, 0) dim bariskeempatkolom2_b double bariskeempatkolom2_b = map_pikselr(x - 1, y + 1) * kernelgauss(3, 1) dim bariskeempatkolom3_b double bariskeempatkolom3_b = map_pikselr(x, y + 1) * kernelgauss(3, 2) dim bariskeempatkolom4_b double bariskeempatkolom4_b = map_pikselr(x + 1, y + 1) * kernelgauss(3, 3) dim bariskeempatkolom5_b double bariskeempatkolom5_b = map_pikselr(x + 2, y + 1) * kernelgauss(3, 4) dim bariskeempat_b double bariskeempat_b = bariskeempatkolom1_b + bariskeempatkolom2_b + bariskeempatkolom3_b + bariskeempatkolom4_b + bariskeempatkolom5_b '5th row 'channel r dim bariskelimakolom1_r double bariskelimakolom1_r = map_pikselr(x - 2, y + 2) * kernelgauss(4, 0) dim bariskelimakolom2_r double bariskelimakolom2_r = map_pikselr(x - 1, y + 2) * kernelgauss(4, 1) dim bariskelimakolom3_r double bariskelimakolom3_r = map_pikselr(x, y + 2) * kernelgauss(4, 2) dim bariskelimakolom4_r double bariskelimakolom4_r = map_pikselr(x + 1, y + 2) * kernelgauss(4, 3) dim bariskelimakolom5_r double bariskelimakolom5_r = map_pikselr(x + 2, y + 2) * kernelgauss(4, 4) dim bariskelima_r double bariskelima_r = bariskelimakolom1_r + bariskelimakolom2_r + bariskelimakolom3_r + bariskelimakolom4_r + bariskelimakolom5_r 'channel g dim bariskelimakolom1_g double bariskelimakolom1_g = map_pikselr(x - 2, y + 2) * kernelgauss(4, 0) dim bariskelimakolom2_g double bariskelimakolom2_g = map_pikselr(x - 1, y + 2) * kernelgauss(4, 1) dim bariskelimakolom3_g double bariskelimakolom3_g = map_pikselr(x, y + 2) * kernelgauss(4, 2) dim bariskelimakolom4_g double bariskelimakolom4_g = map_pikselr(x + 1, y + 2) * kernelgauss(4, 3) dim bariskelimakolom5_g double bariskelimakolom5_g = map_pikselr(x + 2, y + 2) * kernelgauss(4, 4) dim bariskelima_g double bariskelima_g = bariskelimakolom1_g + bariskelimakolom2_g + bariskelimakolom3_g + bariskelimakolom4_g + bariskelimakolom5_g 'channel b dim bariskelimakolom1_b double bariskelimakolom1_b = map_pikselr(x - 2, y + 2) * kernelgauss(4, 0) dim bariskelimakolom2_b double bariskelimakolom2_b = map_pikselr(x - 1, y + 2) * kernelgauss(4, 1) dim bariskelimakolom3_b double bariskelimakolom3_b = map_pikselr(x, y + 2) * kernelgauss(4, 2) dim bariskelimakolom4_b double bariskelimakolom4_b = map_pikselr(x + 1, y + 2) * kernelgauss(4, 3) dim bariskelimakolom5_b double bariskelimakolom5_b = map_pikselr(x + 2, y + 2) * kernelgauss(4, 4) dim bariskelima_b double bariskelima_b = bariskelimakolom1_b + bariskelimakolom2_b + bariskelimakolom3_b + bariskelimakolom4_b + bariskelimakolom5_b 'sums channel r dim sums_r double = barispertama_r + bariskedua_r + barisketiga_r + bariskeempat_r + bariskelima_r sums_r = round(sums_r ) 'sums channel g dim sums_g double = barispertama_g + bariskedua_g + barisketiga_g + bariskeempat_g + bariskelima_g sums_g = round(sums_g ) 'sums channel b dim sums_b double = barispertama_b + bariskedua_b + barisketiga_b + bariskeempat_b + bariskelima_b sums_b = round(sums_b ) if sums_r > 255 console.writeline("koord " & x.tostring & "," & y.tostring & " r= " & sums_r.tostring) elseif sums_g > 255 console.writeline("koord " & x.tostring & "," & y.tostring & " g= " & sums_g.tostring) elseif sums_b > 255 console.writeline("koord " & x.tostring & "," & y.tostring & " b= " & sums_b.tostring) end if map_barur(x, y) = sums_r map_barug(x, y) = sums_g map_barub(x, y) = sums_b next next
update : realize this, when use grayscale image, works. when use full color image on kernel 5x5 , turns image grayscale. realize red channel got more 255.
well made gausian quite complex. in simple form 1/273 times summed image kernel each pixel multiplied these values :
if want can use other numbers, sure 1/p p total sum of multipliers.
ps think faster hardcode multipliers instead of doing exponential math , pi
Comments
Post a Comment