langs a-z
This commit is contained in:
parent
db842d013d
commit
d066446780
11389 changed files with 98361 additions and 1020 deletions
14
Task/Bitmap-Histogram/OCaml/bitmap-histogram-1.ocaml
Normal file
14
Task/Bitmap-Histogram/OCaml/bitmap-histogram-1.ocaml
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
type histogram = int array
|
||||
|
||||
let get_histogram ~img:gray_channel =
|
||||
let width = Bigarray.Array2.dim1 gray_channel
|
||||
and height = Bigarray.Array2.dim2 gray_channel in
|
||||
let t = Array.make 256 0 in
|
||||
for x = 0 to pred width do
|
||||
for y = 0 to pred height do
|
||||
let v = gray_get_pixel_unsafe gray_channel x y in
|
||||
t.(v) <- t.(v) + 1;
|
||||
done;
|
||||
done;
|
||||
(t: histogram)
|
||||
;;
|
||||
15
Task/Bitmap-Histogram/OCaml/bitmap-histogram-2.ocaml
Normal file
15
Task/Bitmap-Histogram/OCaml/bitmap-histogram-2.ocaml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
let histogram_median (h : histogram) =
|
||||
|
||||
let from = 0 and to_ = 255 in
|
||||
let left = h.(from) and right = h.(to_) in
|
||||
|
||||
let rec aux from to_ left right =
|
||||
if from = to_
|
||||
then (from)
|
||||
else
|
||||
if left < right
|
||||
then aux (succ from) to_ (left + h.(from)) right
|
||||
else aux from (pred to_) left (right + h.(to_))
|
||||
in
|
||||
aux from to_ left right
|
||||
;;
|
||||
24
Task/Bitmap-Histogram/OCaml/bitmap-histogram-3.ocaml
Normal file
24
Task/Bitmap-Histogram/OCaml/bitmap-histogram-3.ocaml
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
let () =
|
||||
let img = read_ppm ~filename:"/tmp/foo.ppm" in
|
||||
|
||||
let width, height = get_dims img in
|
||||
let res = new_img ~width ~height in
|
||||
|
||||
let g_img = to_grayscale ~img in
|
||||
let h = get_histogram g_img in
|
||||
let m = histogram_median h in
|
||||
|
||||
let light = (255, 255, 0)
|
||||
and dark = (127, 0, 127) in
|
||||
|
||||
for x = 0 to pred width do
|
||||
for y = 0 to pred height do
|
||||
let v = gray_get_pixel_unsafe g_img x y in
|
||||
if v > m
|
||||
then put_pixel_unsafe res light x y
|
||||
else put_pixel_unsafe res dark x y
|
||||
done;
|
||||
done;
|
||||
|
||||
output_ppm ~oc:stdout ~img:res;
|
||||
;;
|
||||
52
Task/Bitmap-Histogram/Octave/bitmap-histogram.octave
Normal file
52
Task/Bitmap-Histogram/Octave/bitmap-histogram.octave
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
function h = imagehistogram(imago)
|
||||
if ( isgray(imago) )
|
||||
for j = 0:255
|
||||
h(j+1) = numel(imago( imago == j ));
|
||||
endfor
|
||||
else
|
||||
error("histogram on gray img only");
|
||||
endif
|
||||
endfunction
|
||||
|
||||
% test
|
||||
im = jpgread("Lenna100.jpg");
|
||||
img = rgb2gray(im);
|
||||
h = imagehistogram(img);
|
||||
% let's try to show the histogram
|
||||
bar(h);
|
||||
pause;
|
||||
|
||||
% in order to obtain the requested filtering, we
|
||||
% can use median directly on the img, and then
|
||||
% use that value, this way:
|
||||
m = median(reshape(img, 1, numel(img)));
|
||||
disp(m);
|
||||
ibw = img;
|
||||
ibw( img > m ) = 255;
|
||||
ibw( img <= m ) = 0;
|
||||
jpgwrite("lennamed_.jpg", ibw, 100);
|
||||
% which disagree (128) with the m computed with histog_med (130).
|
||||
% If we compute it this way:
|
||||
% m = sort(reshape(img, 1, numel(img)))(ceil(numel(img)/2));
|
||||
% we obtain 130... but builtin median works as expected, since
|
||||
% N (number of pixel of Lenna) is even, not odd.
|
||||
|
||||
% but let's use our histogram h instead
|
||||
function m = histog_med(histog)
|
||||
from = 0; to = 255;
|
||||
left = histog(from + 1); right = histog(to+1);
|
||||
while ( from != to )
|
||||
if ( left < right )
|
||||
from++; left += histog(from+1);
|
||||
else
|
||||
to--; right += histog(to+1);
|
||||
endif
|
||||
endwhile
|
||||
m = from;
|
||||
endfunction
|
||||
|
||||
m = histog_med(h);
|
||||
disp(m);
|
||||
ibw( img > m ) = 255;
|
||||
ibw( img <= m ) = 0;
|
||||
jpgwrite("lennamed.jpg", ibw, 100);
|
||||
63
Task/Bitmap-Histogram/PureBasic/bitmap-histogram.purebasic
Normal file
63
Task/Bitmap-Histogram/PureBasic/bitmap-histogram.purebasic
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
Procedure getHistogram(image, Array histogram(1))
|
||||
Protected w = ImageWidth(image) - 1
|
||||
Protected h = ImageHeight(image) - 1
|
||||
Dim histogram(255) ;output
|
||||
|
||||
StartDrawing(ImageOutput(image))
|
||||
For x = 0 To w
|
||||
For y = 0 To h
|
||||
lum = Red(Point(x, y)) ;the Green or Blue color components could be used also
|
||||
histogram(lum) + 1
|
||||
Next
|
||||
Next
|
||||
StopDrawing()
|
||||
EndProcedure
|
||||
|
||||
Procedure median(Array histogram(1))
|
||||
Protected low, high = 255, left, right
|
||||
|
||||
While low <> high
|
||||
If left < right
|
||||
low + 1
|
||||
left + histogram(low)
|
||||
Else
|
||||
high - 1
|
||||
right + histogram(high)
|
||||
EndIf
|
||||
Wend
|
||||
ProcedureReturn low
|
||||
EndProcedure
|
||||
|
||||
Procedure blackAndWhite(image, median)
|
||||
Protected w = ImageWidth(image) - 1
|
||||
Protected h = ImageHeight(image) - 1
|
||||
CallDebugger
|
||||
StartDrawing(ImageOutput(image))
|
||||
For x = 0 To w
|
||||
For y = 0 To h
|
||||
If Red(Point(x, y)) < median ;the Green or Blue color components could be used also
|
||||
Plot(x, y, $000000) ;black
|
||||
Else
|
||||
Plot(x, y, $FFFFFF) ;white
|
||||
EndIf
|
||||
Next
|
||||
Next
|
||||
StopDrawing()
|
||||
EndProcedure
|
||||
|
||||
Define sourceFile.s, outputFile.s, image = 3, m
|
||||
Dim histogram(255)
|
||||
|
||||
sourceFile = OpenFileRequester("Select source image file", "*.ppm", "PPM image (*.ppm)|PPM", 0)
|
||||
|
||||
If sourceFile And LCase(GetExtensionPart(sourceFile)) = "ppm"
|
||||
LoadImagePPM(image, sourceFile)
|
||||
ImageGrayout(image)
|
||||
|
||||
getHistogram(image,histogram())
|
||||
m = median(histogram())
|
||||
blackAndWhite(image, m)
|
||||
|
||||
outputFile = Left(sourceFile, Len(sourceFile) - Len(GetExtensionPart(sourceFile))) + "_bw." + GetExtensionPart(sourceFile)
|
||||
SaveImageAsPPM(image, outputFile, 1)
|
||||
EndIf
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
:HISTOGRAM:
|
||||
#30 = Buf_Free // #30 = buffer to store histogram data
|
||||
for (#9=0; #9<256; #9++) {
|
||||
Out_Reg(21) TC(#9) Out_Reg(Clear) // @21 = intensity value to be counted
|
||||
Buf_Switch(#15) // switch to image buffer
|
||||
#8 = Search(@21, CASE+BEGIN+ALL+NOERR) // count intensity values
|
||||
Buf_Switch(#30) // switch to histogram buffer
|
||||
Num_Ins(#8, FILL) // store count
|
||||
}
|
||||
Return
|
||||
Loading…
Add table
Add a link
Reference in a new issue