<bgdev />free

Вход Регистрация

приложна конспирология (техническа)
0

#184476 (ツ) Дон Реба
Създадено на 09:36 , видяно: 94 пъти.

замислих се за техническо решение позволяващо да се напъха скрита информация в картинка под форма на безобиден шум, устойчиво на загубна компресия. това да е устойчиво на компресия е ключово, иначе задачата е безинтересна и дори сигурно рабин ще се справи. в нашия форум джонката позволява пнг, но у фейсбука всичко се джипегва, пнг не работи добре за снимки. та идеята е - правя си набор ортогонални вектори с размерност равна на броя пиксели, по един вектор на всеки бит информация която искам да предам. ако бита е 1, добавям неговия вектор, ако е 0 вадя. всичко добре, но ортогонализацията на векторите е квадратична, понеже трябва да "изправям" всеки нов вектор срещу всички досегашни. затова се спрях на практично решение - разделям картинката на блокове и еднократно правя 32 вектора с по-ниска размерност равна на големината на блока, и просто ги преизползвам върху всеки блок. всичко това в среда с удобни инструменти се прави за минути, ето малко код и тестови резултати:

създаване на базиса: 1.запълвам със случайни числа, 2.балансираме до 0 3.ортогонализация, 4. нормализация


void init(int dim,int oct,int seed){
	n=dim;
	r.init(seed);
	U.SetSize(oct*8);
	for(int i=0;i<U.count();i++){
		F& v=U[i];
		v.SetSize(n);
		double S=0;
		for(int j=0;j<n;j++)S+=(v[j]=r.frnd()-0.5);
		float z=S/n;
		for(int j=0;j<n;j++)v[j]-=z;// balans do 0
		for(int j=0;j<i;j++)add(v.data,j,-dot(j,v.data));
		mul(v,1/sqrt(dot(i,v.data)));// normalizaciq
	}
}

кодиране:


void encode(float *dst,const char* text,float A){
	int u0=0;// otmestwaneto w bazisa
	for(const char* p=text;;p++){
		for(int b=0;b<8;b++)add(dst,u0+b,A*SGNBOOL((*p>>b)&1));
		if(!*p)break;// izlizame sled zapis na 0, za da ne pechata gluposti pri dekodiraneto 
		u0+=8;
		if(u0>=U.count()){// izrazhodili sme kapaciteta na bloka ot n stojnosti, minawame na now 
			u0=0;
			dst+=n;
		}
	}
}

декодиране:


float decode(float *data,int dsz){
	char buf[256];
	memset(buf,0,sizeof(buf));
	int rn=0;// prieti simwoli
	float S=0;// amplitudata na prietiq signal 
	int bits=0;// broj blokowe ot n stojnosti 
	for(int bl=0;bl<dsz/n;bl++,data+=n){// za wseki whoden blok 
		for(int i=0;i<U.count();i++,bits++){
			float d=dot(i,data);
			if(d>0)buf[(bits>>3)]|=1<<(bits&7);
			S+=d*d;
		}
	}
	float A=sqrtf(S/bits);
	LOG::Write("A:%f DEC: [%s]\n",A,buf);
	return A;
}

употреба:


	int n=I.Pixels();
	lb.init(n/2,4,234234);// ползвам 32 вектора с размерност  половината пиксели, така ще имам 6 блока побиращи по 4 байта
	float *data=&I.rgb->r;
	float A=lb.decode(data,3*n);// викам декодиране за да измеря наличния шум
	lb.encode(data,"Расстрелять",A*20);// кодирам с ниво 20 пъти над шума за надеждност 
	lb.decode(data,3*n);// тест на записа и проверка на нивото
	I.SaveJpg("c:/temp/encoded.jpg",SJ_LINEAR);

изход в конзолата при кодиране, вижда се че сигнала е със сила 3.67:


 A:0.258966 DEC: EЁЛSuўЂme„ПzdЭа<Л
 A:3.674595 DEC: Расстрелять

декодиране след компресия, вижда се сумарна амплитуда 1.05 т.е. компресията подтиска силата значително


 A:1.057775  DEC: Расстрелять

картинката с вмъкнатото съобщение, нарочно е по-късо за да се вижда граница с оригинала. при реална употреба разбира се това е крайно недопустимо :)

сега докато го писах това се усетих че все пак текущата техническа реализация подлежи на детектване (т.е. може да привличе внимание), ако се търси специално. любопитно ми е кой ще се усети (аз залагам на делегате)

Attached files:
FileSizeUploadedDownloadsMD5 hash
encoded.jpg222667 bytes24.07.202635320e6cc55a138e7a5f25ff1bb099c102
#184484 (ツ) Rabin
Създадено на 10:02 , видяно: 90 пъти.

Тва го има от 20 г. поне. Рабиноидите си чатим а Урсул се кефи на картинки на сърчица с форма на гъз.

#184519 (ツ) Реконструктор
Създадено на 14:09 , видяно: 70 пъти.

Сложно решение за нещо просто, но ОК - одобряю, само заради ползването на правилния език (не програмен) 😆

#184555 (ツ) Delegate
Създадено на 16:21 , видяно: 53 пъти.

не знам, далече съм от тия неща, но

A*20);// кодирам с ниво 20 пъти над шума за надеждност

това си е е бая усилване.

и сийда 234234 за всички блокове.

ако съм разбрал правилно, в нормалните снимки шумът в горния ляв ъгъл на снимката няма никаква корелация с шума в долния десен ъгъл. Твоят метод обаче изкуствено вкарва една и съща структура от шум през определена стъпка. Има денойзери, с които може да лъсне това.

#184562 (ツ) Дон Реба
Създадено на 17:26 , видяно: 44 пъти.
Delegate

Твоят метод обаче изкуствено вкарва една и съща структура от шум през определена стъпка. Има денойзери, с които може да лъсне това.

ако знаеш какво търсиш да, но това не може да се забележи на око, дори се съмнявам че с денойзер ще лъсне. в тая конкретно имплементация обаче шума се вкарва директно върху стойностите такива каквито са в джипега, което мен като човек занимавал се с картинки веднага ми се наби на очи, трябва да се вкара в линеаризиран цвят, само така е неотличим от истински шум.

#184563 (ツ) Дон Реба
Създадено на 17:27 , видяно: 44 пъти.
Реконструктор

Сложно решение за нещо просто, но ОК - одобряю, само заради ползването на правилния език (не програмен) 😆

а, много е просто, затова соросоидите избиха де що може лидери на иран, хизбула и тн.

#184564 (ツ) Реконструктор
Създадено на 17:30 , видяно: 41 пъти.
Дон Реба

а, много е просто, затова соросоидите избиха де що може лидери на иран, хизбула и тн.

Те тва им е грешката, фантазират си, че отстранявайки формалния лидер на достатъчно хомогенен социум, ще осъществят "велика победа". Нещата, всъщност, не работят така.

#184568 (ツ) Delegate
Създадено на 17:47 , видяно: 35 пъти.

а, ти говориш на око да забележиш, че има шум или цифров слой. добавения шум става асиметрично видим — изглежда мръсен и изпъква силно по сенките, докато в по-светлите зони се губи.

#184573 (ツ) waldorf
Създадено на 18:07 , видяно: 31 пъти.
Дон Реба

ако знаеш какво търсиш да, но това не може да се забележи на око, дори се съмнявам че с денойзер ще лъсне. в тая конкретно имплементация обаче шума се вкарва директно върху стойностите такива каквито са в джипега, което мен като човек занимавал се с картинки веднага ми се наби на очи, трябва да се вкара в линеаризиран цвят, само така е неотличим от истински шум.

Не променяш ли ентропията с тея фатки? Това май се детектваше.

#184581 (ツ) |
Създадено на 18:35 , видяно: 21 пъти.
Дон Реба

ако знаеш какво търсиш да, но това не може да се забележи на око, дори се съмнявам че с денойзер ще лъсне. в тая конкретно имплементация обаче шума се вкарва директно върху стойностите такива каквито са в джипега, което мен като човек занимавал се с картинки веднага ми се наби на очи, трябва да се вкара в линеаризиран цвят, само така е неотличим от истински шум.

Трябваше да пуснеш преди- и след-. Така е трудно да се определи.

#184591 (ツ) Дон Реба
Създадено на 18:57 , видяно: 14 пъти.
|

Трябваше да пуснеш преди- и след-. Така е трудно да се определи.

че то е, картинката е кодирана само до средата

#184592 (ツ) |
Създадено на 18:59 , видяно: 11 пъти.
Дон Реба

че то е, картинката е кодирана само до средата

Е да, в такъв случай определено си личи.

приложна конспирология (техническа)
0

AsmBB v3.0 (check-in: 2fb30f0a060190b0); SQLite v3.53.0 (check-in: 4525003a53a7fc63);
©2016..2024 John Found; Licensed under EUPL. Powered by Assembly language Created with Fresh IDE