Image convolution: Difference between revisions

Content added Content deleted
m (→‎{{header|J}}: use lang block for syntax highlighting and add whitespace to help with reading)
Line 612: Line 612:
<lang J>NB. pad the edges of an array with border pixels
<lang J>NB. pad the edges of an array with border pixels
NB. (increasing the first two dimensions by 1 less than the kernel size)
NB. (increasing the first two dimensions by 1 less than the kernel size)
pad=:adverb define
pad=: adverb define
'a b'=. (<.,.>.) 0.5 0.5 p. $m
'a b'=. (<. ,. >.) 0.5 0.5 p. $m
a"_`(0,]-1:)`(#1:)}~&# # b"_`(0,]-1:)`(#1:)}~&(1{$) #"1 ]
a"_`(0 , ] - 1:)`(# 1:)}~&# # b"_`(0 , ] - 1:)`(# 1:)}~&(1 { $) #"1 ]
)
)


kernel_filter=:adverb define
kernel_filter=: adverb define
($m)+/ .*&(,m)&(,/);._3 m pad
($m)+/ .*&(,m)&(,/);._3 m pad
)</lang>
)</lang>
Line 626: Line 626:
Example use:
Example use:


NB. kernels borrowed from C and TCL implementations
<lang J> NB. kernels borrowed from C and TCL implementations
sharpen_kernel=: _1+10*4=i.3 3
sharpen_kernel=: _1+10*4=i.3 3
blur_kernel=: 3 3$%9
blur_kernel=: 3 3$%9
emboss_kernel=: _2 _1 0,_1 1 1,:0 1 2
emboss_kernel=: _2 _1 0,_1 1 1,:0 1 2
sobel_emboss_kernel=: _1 _2 _1,0,:1 2 1
sobel_emboss_kernel=: _1 _2 _1,0,:1 2 1


'blurred.ppm' writeppm~ blur_kernel kernel_filter readppm 'original.ppm'
'blurred.ppm' writeppm~ blur_kernel kernel_filter readppm 'original.ppm'</lang>


=={{header|Java}}==
=={{header|Java}}==