Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
50
Task/Bitmap-Histogram/Tcl/bitmap-histogram.tcl
Normal file
50
Task/Bitmap-Histogram/Tcl/bitmap-histogram.tcl
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
package require Tcl 8.5
|
||||
package require Tk
|
||||
|
||||
proc convert_to_blackandwhite {filename} {
|
||||
set img [image create photo]
|
||||
readPPM $img $filename
|
||||
grayscale $img
|
||||
set hist [histogram $img]
|
||||
set median [median $img $hist]
|
||||
blackandwhite $img $median
|
||||
output_ppm $img bw_$filename
|
||||
}
|
||||
|
||||
proc histogram {image} {
|
||||
set hist [dict create]
|
||||
for {set x 0} {$x < [image width $image]} {incr x} {
|
||||
for {set y 0} {$y < [image height $image]} {incr y} {
|
||||
dict incr hist [luminance {*}[$image get $x $y]]
|
||||
}
|
||||
}
|
||||
return $hist
|
||||
}
|
||||
|
||||
proc luminance {r g b} {
|
||||
expr {
|
||||
int(0.2126*$r + 0.7152*$g + 0.0722*$b)
|
||||
}
|
||||
}
|
||||
|
||||
proc median {img hist} {
|
||||
set sum [expr {[image width $img] * [image height $img]}]
|
||||
set total 0
|
||||
foreach luminance [lsort -integer [dict keys $hist]] {
|
||||
incr total [dict get $hist $luminance]
|
||||
if {$total > $sum / 2} break
|
||||
}
|
||||
return $luminance
|
||||
}
|
||||
|
||||
proc blackandwhite {image median} {
|
||||
for {set x 0} {$x < [image width $image]} {incr x} {
|
||||
for {set y 0} {$y < [image height $image]} {incr y} {
|
||||
if {[luminance {*}[$image get $x $y]] < $median} {
|
||||
$image put black -to $x $y
|
||||
} else {
|
||||
$image put white -to $x $y
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue