langs a-z
This commit is contained in:
parent
db842d013d
commit
d066446780
11389 changed files with 98361 additions and 1020 deletions
55
Task/Image-convolution/OCaml/image-convolution-1.ocaml
Normal file
55
Task/Image-convolution/OCaml/image-convolution-1.ocaml
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
let get_rgb img x y =
|
||||
let _, r_channel,_,_ = img in
|
||||
let width = Bigarray.Array2.dim1 r_channel
|
||||
and height = Bigarray.Array2.dim2 r_channel in
|
||||
if (x < 0) || (x >= width) then (0,0,0) else
|
||||
if (y < 0) || (y >= height) then (0,0,0) else (* feed borders with black *)
|
||||
get_pixel img x y
|
||||
|
||||
|
||||
let convolve_get_value img kernel divisor offset = fun x y ->
|
||||
let sum_r = ref 0.0
|
||||
and sum_g = ref 0.0
|
||||
and sum_b = ref 0.0 in
|
||||
|
||||
for i = -1 to 1 do
|
||||
for j = -1 to 1 do
|
||||
let r, g, b = get_rgb img (x+i) (y+j) in
|
||||
sum_r := !sum_r +. kernel.(j+1).(i+1) *. (float r);
|
||||
sum_g := !sum_g +. kernel.(j+1).(i+1) *. (float g);
|
||||
sum_b := !sum_b +. kernel.(j+1).(i+1) *. (float b);
|
||||
done;
|
||||
done;
|
||||
( !sum_r /. divisor +. offset,
|
||||
!sum_g /. divisor +. offset,
|
||||
!sum_b /. divisor +. offset )
|
||||
|
||||
|
||||
let color_to_int (r,g,b) =
|
||||
(truncate r,
|
||||
truncate g,
|
||||
truncate b)
|
||||
|
||||
let bounded (r,g,b) =
|
||||
((max 0 (min r 255)),
|
||||
(max 0 (min g 255)),
|
||||
(max 0 (min b 255)))
|
||||
|
||||
|
||||
let convolve_value ~img ~kernel ~divisor ~offset =
|
||||
let _, r_channel,_,_ = img in
|
||||
let width = Bigarray.Array2.dim1 r_channel
|
||||
and height = Bigarray.Array2.dim2 r_channel in
|
||||
|
||||
let res = new_img ~width ~height in
|
||||
|
||||
let conv = convolve_get_value img kernel divisor offset in
|
||||
|
||||
for y = 0 to pred height do
|
||||
for x = 0 to pred width do
|
||||
let color = conv x y in
|
||||
let color = color_to_int color in
|
||||
put_pixel res (bounded color) x y;
|
||||
done;
|
||||
done;
|
||||
(res)
|
||||
35
Task/Image-convolution/OCaml/image-convolution-2.ocaml
Normal file
35
Task/Image-convolution/OCaml/image-convolution-2.ocaml
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
let emboss img =
|
||||
let kernel = [|
|
||||
[| -2.; -1.; 0. |];
|
||||
[| -1.; 1.; 1. |];
|
||||
[| 0.; 1.; 2. |];
|
||||
|] in
|
||||
convolve_value ~img ~kernel ~divisor:1.0 ~offset:0.0;
|
||||
;;
|
||||
|
||||
let sharpen img =
|
||||
let kernel = [|
|
||||
[| -1.; -1.; -1. |];
|
||||
[| -1.; 9.; -1. |];
|
||||
[| -1.; -1.; -1. |];
|
||||
|] in
|
||||
convolve_value ~img ~kernel ~divisor:1.0 ~offset:0.0;
|
||||
;;
|
||||
|
||||
let sobel_emboss img =
|
||||
let kernel = [|
|
||||
[| -1.; -2.; -1. |];
|
||||
[| 0.; 0.; 0. |];
|
||||
[| 1.; 2.; 1. |];
|
||||
|] in
|
||||
convolve_value ~img ~kernel ~divisor:1.0 ~offset:0.5;
|
||||
;;
|
||||
|
||||
let box_blur img =
|
||||
let kernel = [|
|
||||
[| 1.; 1.; 1. |];
|
||||
[| 1.; 1.; 1. |];
|
||||
[| 1.; 1.; 1. |];
|
||||
|] in
|
||||
convolve_value ~img ~kernel ~divisor:9.0 ~offset:0.0;
|
||||
;;
|
||||
23
Task/Image-convolution/Octave/image-convolution.octave
Normal file
23
Task/Image-convolution/Octave/image-convolution.octave
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
function [r, g, b] = rgbconv2(a, c)
|
||||
r = im2uint8(mat2gray(conv2(a(:,:,1), c)));
|
||||
g = im2uint8(mat2gray(conv2(a(:,:,2), c)));
|
||||
b = im2uint8(mat2gray(conv2(a(:,:,3), c)));
|
||||
endfunction
|
||||
|
||||
im = jpgread("Lenna100.jpg");
|
||||
emboss = [-2, -1, 0;
|
||||
-1, 1, 1;
|
||||
0, 1, 2 ];
|
||||
sobel = [-1., -2., -1.;
|
||||
0., 0., 0.;
|
||||
1., 2., 1. ];
|
||||
sharpen = [ -1.0, -1.0, -1.0;
|
||||
-1.0, 9.0, -1.0;
|
||||
-1.0, -1.0, -1.0 ];
|
||||
|
||||
[r, g, b] = rgbconv2(im, emboss);
|
||||
jpgwrite("LennaEmboss.jpg", r, g, b, 100);
|
||||
[r, g, b] = rgbconv2(im, sobel);
|
||||
jpgwrite("LennaSobel.jpg", r, g, b, 100);
|
||||
[r, g, b] = rgbconv2(im, sharpen);
|
||||
jpgwrite("LennaSharpen.jpg", r, g, b, 100);
|
||||
Loading…
Add table
Add a link
Reference in a new issue