Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Стандартное тестовое изображение птицы bird.bmp занимает 66614 байт. «Сжатое» двумерным вариантом алгоритма текстовое представление данных в rar архиве занимает 10138 байт.



4. Не надо пользоваться зипом, а надо сразу писать в двоичном формате. Кстати, хорошая проверка — если зип этот двоичный формат сожмет существенно, значит, у вас плохой алгоритм сжатия.
Следует отметить, что значение СКО может незначительно изменяться при существенном ухудшении субъективно воспринимаемого качества сжатого изображения. Поэтому СКО, так же как и пиковое отношение сигнал/шум (PSNR), не может быть взято за основу при построении оптимальных с визуальной точки зрения систем преобразования изображений с целью их сжатия.
Необходимо отметить, что значение PSNR не может в полной мере отражать воздействие на изображение различных видов помех (см. рис. 1), т.е. при наличии в изображении разных видов шумов его значение может оставаться постоянным, а качество изображения существенно изменяться.
Проведённые исследования показали, что система человеческого восприятия (HVS) менее чувствительна к искажениям на низких частотах, чем к искажениям в высокочастотной области

1. Вы сравниваете bmp (изображение без сжатия) и полученное сжатое представление. Почему не jpg с вашим вариантом? Как определить, что предложенный алгоритм хоть в чем-то лучше того же jpg?

2. На глаз тут ничего не увидишь, если только разница совсем уж не грубая. Надо использовать хотя бы среднеквадратичное отклонение по всему рисунку при одинаковой длинне сжатого файла.
3. Если судить по визуальному результату, но ваш аглоритм не сжимает случайные данные, а ровно наоборот — извабляется от высокочастотного случайного шума и оставляет существенные низкочастотные составляющие — то есть, делает ровно то, что и все остальные алгоритмы сжатия. Так в чем же фишка?
4. Не надо пользоваться зипом, а надо сразу писать в двоичном формате. Кстати, хорошая проверка — если зип этот двоичный формат сожмет существенно, значит, у вас плохой алгоритм сжатия.




Я всё искал методику, которая бы позволила быстрее искать кусок сигнала в другом случайном сигнале
Затем, когда очередной входной кусок будет известен, крутим такой простенький цикл (начиная с первого эталонного куска как с кандидата на роль достаточно похожего), пока он дает переходы на более похожий эталонный кусок. Зная, что эталонный кусок с номером A уже рассмотрен на предыдущем шаге, надо рассмотреть все 8-16 кусков, самых похожих на A согласно таблице, и выбрать среди них наиболее похожий на входной. Получается постепенное улучшение кандидата на роль достаточно похожего эталонного куска, но нахождение действительно наиболее похожего не гарантируется — что-то вроде локального максимума.


uint x = 1, y, z, w;
// A faster Marsaglia's Xorshift pseudo-random generator in unsafe C#
// http://roman.st/Article/Faster-Marsaglia-Xorshift-pseudo-random-generator-in-unsafe-C
byte NextByte() {
uint t = x ^ ( x << 11 );
x = y; y = z; z = w;
w = w ^ ( w >> 19 ) ^ ( t ^ ( t >> 8 ) );
return ( byte ) ( w & 0xFF );
}
public bool NumericEvaluation( object[] args, out object result, ref Context context ) {
x = 1;
y = 0;
z = 0;
w = 0;
var nums = new byte[ 256 * 256 + 8 ];
int k;
for ( k = 0; k < 256 * 256 + 8; k++ ) nums[k] = NextByte();
var list = new List<List<int>>();
for ( k = 0; k < 256 * 256; k++ ) {
list.Add( new List<int>() );
}
for ( k = 0; k < 256 * 256; k++ ) {
var classid = nums[k + 0] >> 6;
classid += ( nums[k + 1] >> 6 ) << 2;
classid += ( nums[k + 2] >> 6 ) << 4;
classid += ( nums[k + 3] >> 6 ) << 6;
classid += ( nums[k + 4] >> 6 ) << 8;
classid += ( nums[k + 5] >> 6 ) << 10;
classid += ( nums[k + 6] >> 6 ) << 12;
classid += ( nums[k + 7] >> 6 ) << 14;
list[ classid ].Add( k );
}
var res = new TComplex[ 256 * 256, 1 ];
for ( k = 0; k < 256 * 256; k++ ) {
res[ k, 0 ] = new TComplex( list[k].Count, 0 );
}
result = res;
return true;
}
Об одном алгоритме сжатия случайных сигналов (с потерями)