2013-01-11 1 views
2

Я пытаюсь создать образ 20X20 с использованием opencv, который следует за нормальным распределением, я понимаю, что есть функция randn, которая позволяет мне делать что-то подобное, но как я должен это делать, если я намерен внедрить строку в данные образа, который я пытаюсь создать?Создайте изображение, которое следует за гауссовским дистрибутивом, используя OpenCV C++

+1

Вы пытаетесь генерировать гауссовский шум на изображении или ядро ​​фильтра с гауссовой формой? – Pete

+1

Итак, вы хотите создать изображение, которое выглядит так: http://en.wikipedia.org/wiki/File:Image_gaussian_noise_example.png? И когда вы говорите о встраивании строки, вы имеете в виду метаданные или стеганографию? – sietschie

+0

Я имел в виду использование Steganography, и я пытаюсь создать изображение, которое показано в ссылке. Извините за то, что я не уточнил в своем вопросе – user1926691

ответ

2

Проверьте здесь для равномерного к гауссовским случайным числам: http://www.design.caltech.edu/erik/Misc/Gaussian.html

Если вы хотите использовать последний 2 бит данных (наименее значимых из них) для скрытого текста, которые вы хотите установить их к нулю в зашумленном образ.

Далее создайте 3 изображения:

Image noise, mask, textimg 

AddNoiseTo(noise) // any kind of noise you want 


SetEveryPixel(mask,unsigned char, 255-3) 
CvAnd(noise,mask,noise) // to remove noise from the last 2 bits 


cvPutText(textimg,yourtext,white); 
CvNot(mask,mask) // invert the mask to remove data from the first 6 bits 
CvAnd(textimg,mask,textimg) // filter the text image so only last 2 bits are kept 
CvOr(noise,textimg,outputimg) // this will merge the two images 

Если вы хотите 7 битов данных (чтобы легче увидеть текст невооруженным глазом) вычитаем 127 (двоичный для 7 1-х) от маски вместо 3 (11 в двоичном формате).