Диплом ЦВЗ (1221233), страница 18
Текст из файла (страница 18)
}
int Kg = 20;//коэффициент усиления мощности сигнала
//нормирование контейнера
for (int x = 0; x < heigh; x++)
{
for (int y = 0; y < widt; y++)
{
double Temp = (double)Matvector[0].at<uchar>(x, y) / 255.0;
Matvector[0].at<uchar>(x, y) = Temp∙(255 - 2 ∙ Kg) + Kg;
}
}
t1 = clock() - t1;
cout << "Время генерирования ЦВЗ: " << (double)t1 / CLOCKS_PER_SEC << " секунд" << endl;
Mat CVZ(heigh, widt, CV_8U);
for (int x = 0; x < heigh; x++)
{
for (int y = 0; y < widt; y++)
{
CVZ.at<uchar>(x, y) = E[x][y];
}
}
imwrite("SmithCVZ.tiff", CVZ);
namedWindow(" ЦВЗ", WINDOW_AUTOSIZE);
imshow(" ЦВЗ", CVZ);
waitKey(0);
destroyWindow("ЦВЗ");
//встраивание
cout << "Встраивание ЦВЗ" << endl;
clock_t t2 = clock();
for (int x = 0; x < heigh; x++)
{
for (int y = 0; y < widt; y++)
{
Matvector[0].at<uchar>(x, y) = Matvector[0].at<uchar>(x, y) + Kg∙E[x][y];
}
}
vector<Mat>Vec;
Vec.push_back(Matvector[0]);
Vec.push_back(Matvector[1]);
Vec.push_back(Matvector[2]);
Mat FResult(heigh, widt, CV_8UC3);
merge(Vec, FResult);
imwrite("mergedSpectr.tiff", FResult);
t2 = clock() - t2;
cout << "Время встраивания ЦВЗ: " << (double)t2 / CLOCKS_PER_SEC << " секунд" << endl;
namedWindow("Изображение с ЦВЗ", WINDOW_AUTOSIZE);
imshow("Изображение с ЦВЗ", FResult);
waitKey(0);
destroyWindow("Изображение с ЦВЗ");
int md = MD(start, Matvector[0]);
double ad = AD(start, Matvector[0]);
double nad = NAD(start, Matvector[0]);
double mse = MSE(start, Matvector[0]);
double nmse = NMSE(start, Matvector[0]);
double snr = SNR(start, Matvector[0]);
double psnr = PSNR(start, Matvector[0]);
double If = IF(start, Matvector[0]);
cout << endl;
cout << "Показатели визуального искажения" << endl;
cout << "Максимальная разность значений пикселов: " << md << endl;
cout << "Средняя абсолютная разность значений пикселов: " << ad << endl;
cout << "Нормированная средняя абсолютная разность: " << nad << endl;
cout << "Отношение сигнал-шум: " << snr << endl;
cout << "Максимальное отношение сигнал-шум: " << psnr << endl;
cout << "Качество изображения: " << If ∙ 100 << "%" << endl;
/∙FResult=Resize(FResult, widt, heigh);∙/
/∙FResult = Turn(FResult);∙/
/∙FResult=Gaussian(FResult);∙/
/∙FResult = Chetkost(FResult);∙/
/∙FResult = brightness(FResult);∙/
/∙FResult = Dark(FResult);∙/
/∙FResult = Erode(FResult);∙/
/∙FResult = CutRight(FResult, heigh, widt);∙/
/∙FResult = CutDown(FResult, heigh, widt);∙/
/∙FResult = JPEGComp(FResult);∙/
heigh = FResult.rows;
widt = FResult.cols;
//извлечение ЦВЗ
cout << "Извлечение ЦВЗ" << endl;
clock_t t3 = clock();
string message;
bitset<256>tem;
for (int i = 0; i < Nf; i++)
{
int mu = 0;
for (int x = 0; x < heigh; x++)
{
for (int y = 0; y < widt; y++)
{
mu += Matvector[0].at<uchar>(x, y)∙f[i][x][y];
}
}
if (mu>0)
{
tem[i] = 1;
}
if (mu < 0)
{
tem[i] = 0;
}
if (mu == 0)
{
tem[i] = rand() % 2;
}
}
for (int i = 0; i < length; i++)
{
bitset<8>symbol;
for (int j = 0; j < 8; j++)
{
symbol[j] = tem[i ∙ 8 + j];
}
uchar sym = symbol.to_ulong();
message.push_back(sym);
}
t3 = clock() - t3;
cout << "Время извлечения ЦВЗ: " << (double)t3 / CLOCKS_PER_SEC << " секунд" << endl;
cout << "Исходное сообщение" << endl;
cout << message << endl;
}
int main()
{
setlocale(LC_ALL, "Russian");
cout << "Программный комплекс, реализующий алгоритмы генерирования и встраивания ЦВЗ в изображения, а также их сравнение" << endl;
cout << "Исследование проведено в рамках дипломной работы.2015" << endl;
//Выбор файла
char∙ textfile = new char[];
cout << "Введите путь до текстового файла" << endl;
cin >> textfile;
std::ifstream a(textfile);
string text;
a.seekg(0, ios_base::end);
text.resize(a.tellg());
a.seekg(0, ios_base::beg);
a.read((char∙)text.data(), text.size());
a.close();
cout << text << endl;
char∙ filename = new char[];
//Выбор файла
cout << "Введите путь до изображения" << endl;
cin >> filename;
Mat image;
image = imread(filename, CV_LOAD_IMAGE_COLOR);
namedWindow("Display window", WINDOW_AUTOSIZE);
imshow("Display window", image);
waitKey(0);
destroyWindow("DisplayWindow");
Mat Matvector[3];
split(image, Matvector);
int widt = image.cols;
int heigh = image.rows;
int contsize = widt∙heigh;
const int length = text.length();
//Menu
cout << "Главное меню для выбора метода генерирования и встраивания ЦВЗ" << endl;
int x;
cout << "Выберите метод" << endl;
cout << "1. Алгоритм встраивания в наименее значащий бит" << endl;
cout << "2.Алгоритм Куттера-Джордана" << endl;
cout << "3.Алгоритм Коха-Жао" << endl;
cout << "4.Алгоритм Смита-Комиски" << endl;
cout << endl;
cin >> x;
switch (x)
{
//алгоритм LSB
case 1:
cout << "Выбран алгоритм LSB " << endl;
LSB(Matvector, text, widt, heigh, contsize, length);
break;
//Алгоритм Куттера
case 2:
cout << "Выбран алгоритм Куттера" << endl;
Kutter(filename, Matvector, text, widt, heigh, contsize, length);
break;
case 3:
cout << "Выбран алгоритм Коха" << endl;
Kox(Matvector, text, widt, heigh, contsize, length);
break;
case 4:
cout << "Выбран алгоритм Смита" << endl;
Smith(Matvector, text, widt, heigh, contsize, length);
break;
default:
cout << "Алгоритм не был выбран" << endl;
break;
}
int z;
cin >> z;
return 0;
}