Мультимедийные вычисления

Я искал решение приведенного ниже вопроса, любая оказанная помощь будет высоко оценена.

Сгенерируйте полутоновое изображение размером 256 x 256 в массиве, используя случайные целые числа в [0, 15]. Используйте матрицу сглаживания 4 x 4 для отображения смешанного изображения с использованием двоичной интенсивности (т. е. с нулевой интенсивностью или максимальной интенсивностью). Отобразите исходное изображение (сгенерированное с использованием случайных чисел) и размытое изображение.


person Mandar    schedule 25.08.2014    source источник
comment
Вы действительно пытались делать свою работу сами или просто хотите, чтобы кто-то другой сделал это за вас?   -  person twalberg    schedule 25.08.2014


Ответы (1)


Следующая программа Forth для Gforth создает случайное изображение в градациях серого с 15 уровнями, сглаживает его с помощью 4× 4 индексной матрицы в двухуровневое изображение, копирует оба бок о бок в массив 512×256 байт и записывает это как изображение PGM на стандартный вывод, чтобы его можно было передать в display из файла ImageMagick:

include random.fs

256 constant image-size
15 constant max-gray-value

create grayscale-image  image-size dup *  chars allot
create result-image  image-size dup * 2*  chars allot
create index-matrix   0 , 12 ,  3 , 15 ,
                      8 ,  4 , 11 ,  7 ,
                      2 , 14 ,  1 , 13 ,
                     10 ,  6 ,  9 ,  5 ,

: randomly-fill-grayscale-image  ( -- )
    image-size dup *  0
    ?do
        max-gray-value random  grayscale-image i chars +  c!
    loop
;

: copy-grayscale-to-result-image  { offset -- }
    image-size 0
    ?do
        grayscale-image  i image-size * chars +
        result-image  i image-size 2* *  offset +  chars +
        image-size
        move
    loop
;

: dither-grayscale-image ( -- )
    image-size 0
    ?do
        image-size 0
        ?do
            grayscale-image  j image-size * i + chars +  dup  c@
            index-matrix  j 4 mod 4 *  i 4 mod  +  cells +  @
            < if 0 else max-gray-value then
            swap c!
        loop
    loop
;

: print-pgm ( -- )
    ." P5" cr
    image-size dup 2* 2dup . . max-gray-value . cr
    * result-image swap type
;

: main  ( -- )
    utime drop seed !
    randomly-fill-grayscale-image
    0 copy-grayscale-to-result-image
    dither-grayscale-image
    image-size copy-grayscale-to-result-image
    print-pgm
;

main bye

Это можно назвать так:

$ gforth dither.fs | display

Если display недоступен, изображение можно перенаправить в файл и просмотреть с помощью другого средства просмотра изображений или редактора:

$ gforth dither.fs > dither_image.pgm

Полученное изображение выглядит следующим образом:

Случайное и размытое изображение рядом

person BlackJack    schedule 27.08.2014