53 lines
1.1 KiB
Lua
53 lines
1.1 KiB
Lua
function Histogram( image )
|
|
local size_x, size_y = #image, #image[1]
|
|
|
|
local histo = {}
|
|
for i = 0, 255 do
|
|
histo[i] = 0
|
|
end
|
|
|
|
for i = 1, size_x do
|
|
for j = 1, size_y do
|
|
histo[ image[i][j] ] = histo[ image[i][j] ] + 1
|
|
end
|
|
end
|
|
|
|
return histo
|
|
end
|
|
|
|
function FindMedian( histogram )
|
|
local sum_l, sum_r = 0, 0
|
|
local left, right = 0, 255
|
|
|
|
repeat
|
|
if sum_l < sum_r then
|
|
sum_l = sum_l + histogram[left]
|
|
left = left + 1
|
|
else
|
|
sum_r = sum_r + histogram[right]
|
|
right = right - 1
|
|
end
|
|
until left == right
|
|
|
|
return left
|
|
end
|
|
|
|
|
|
bitmap = Read_PPM( "inputimage.ppm" )
|
|
gray_im = ConvertToGrayscaleImage( bitmap )
|
|
histogram = Histogram( gray_im )
|
|
median = FindMedian( histogram )
|
|
|
|
for i = 1, #gray_im do
|
|
for j = 1, #gray_im[1] do
|
|
if gray_im[i][j] < median then
|
|
gray_im[i][j] = 0
|
|
else
|
|
gray_im[i][j] = 255
|
|
end
|
|
end
|
|
end
|
|
|
|
bitmap = ConvertToColorImage( gray_im )
|
|
Write_PPM( "outputimage.ppm", bitmap )
|