2015-09-23 36 views
0

什麼是最好的方式來本質上打亂圖片中的所有像素,從而扭曲它,所以你不能再認識它描繪的是什麼,但不是隨機的,所以如果你想,你可以解開像素並獲得原始圖片?而且,我不一定希望代碼以相同的方式對每張圖片進行打亂,只要這是可能的。只要它不是太荒謬而且有效,我就不會偏好它會是什麼語言。如何「加擾」(不是隨機)圖片中的所有像素?

我已搜查甚廣,不能找到真正走動的像素以可控的方式...只是改變的十六進制值和諸如此類的東西......

任何幫助嗎?

+3

使用加密/解密,將圖像視爲字節[]。 – Enigmativity

+1

爭奪,你的意思是洗牌像素的順序?如果你隨機隨機洗牌,但記住隨機種子,你應該能夠再次「解除洗牌」。 – Blorgbeard

+0

請記住,您不能使用JPEG或任何其他有損格式。一旦保存,一些像素將被改變並且解擾將產生原始圖像的可識別殘骸或總隨機噪聲。 PNG應該是最好的選擇 – Martheen

回答

1

所以你的想法是通過移動圖片中的像素來打亂圖片,你需要更多的變體,並且最重要的是你想要它解擾。 那麼,這是相當具有挑戰性的,

除非你作弊:決定性的混亂!

確定性混沌建立在概念之上,簡單的可逆操作可以描述多次運行混沌之後。

您可以定義一組可逆操作。

例如,

swap_horizontal_lines(h_line_a, h_line_b); 
swap_vertical_lines(v_line_a, v_line_c); 
another could be rotate_pixel_RGB(x,y); 

RGB => GBR => BRG => RGB 所以通過應用操作三次,你回到原來的值。

依此類推...... 您可以以字節的形式訪問圖片,並交換其字節。

所以,如果你會以某種順序應用這些操作,只有你知道,你可以打亂圖片,即使它的母親CMOS傳感器也不會認出它是它的孩子:)。 通過向後應用順序,您可以返回圖片。 只要注意rgb旋轉,它需要3次反轉。

scrambling_runs => descramlbing_runs

0 => 0 or 3, 
1 => 2 
2 => 1 
3 => 0 or 3 
0

我不知道爲什麼要 「移動」 的像素。每個像素都用十六進制值表示,所以如果將像素1「移動」到不同的位置,則位置1的十六進制值將更改爲您替換的像素的值。如此有效地,你所做的只是改變位置1的十六進制值。你並沒有真正「移動」任何東西。那麼爲什麼不呢,只需創建一個算法來以預定的方式更改十六進制值,即可解密。

1

對不起,並不是要挖出一條死去的線程,但我想我可能會找到你要找的東西的答案。

我剛做了我的第一個Android應用程序,它完全是這樣。如果你想檢查出here

我的想法是使用密碼將每個像素移動到一個不同的(隨機的)點,但仍然可以撤消每一步移動以使用密碼恢復相同的圖像。如果您有1000 x 1000的圖像,並且您獨立移​​動每個像素,那就是1,000,000次操作,這可能需要很長時間,所以程序會相互獨立地移動每一行和列,這會將其減少到大約2000次操作。

但是,如果你「重新排列」每一行和每一列,你會得到一個奇怪的看起來不完全隨機的模式,所以下一步是傾斜圖像並再次對行和列進行擾亂。

使用這種方法,你也可以組起來的行和列,以得到一個「塊」爭奪

一切是可逆的,如果你做到這一點向後讓你的原創,但一對夫婦的注意事項:您必須使用非損失圖像格式,否則會將所有東西混淆(PNG,BMP等),如果您修改了「混亂」圖像(調整大小,旋轉,裁剪,歪斜),即使是1行/列,你不能在所有

Here's the complete process

解讀它的密碼獲取的「鑰匙」是最困難的部分,我可以張貼一些如果你願意,代碼可以在Java中使用。