FAU公開研究挑戰賽之Holography

去年四月不知從哪裡收到一所德國大學的郵件,是邀請參加一個叫做公開研究挑戰賽的活動( FAU Open Research nChallenge)。正好有個德國同事,就問了下FAU大學如何。哪裡知道她直搖頭,沒有聽說過。只好自己google一下,大致在德國排名n20上下。

且不管學校如何,比賽是非常有趣的,共有三個比賽項目可選:一是電子刑偵,大致就是從硬碟鏡像文件中破解系統並從中提取有效刑偵信息;二是n優化地鐵時間安排,在符合運營時間要求的前提下儘可能節約能耗;第三個就是光子學技術——標題起得很大,落實到題目卻只是全息(holography)而已。雖然我感覺三個題目我都能獨立完成,不過工作比較繁忙,抽不出時間各個擊破,於是就挑了最在行的光學挑戰玩玩。

具體題目是一個虛構的「世界銀行」採用純相位全息圖作為貨幣的防偽碼,參賽者要做的就是破解防偽碼並自行偽造任意數額「世界銀行幣」的防偽全息碼。更具體的信息可以參考比賽的官方網站:FAU - Open Research Challenge: Photonic Technologies

比賽題目中的三幅全息圖:

直接打開matlab作了個fft,發現題目簡直不要太簡單,直接拿到結果了:

第二幅和第三幅各自fft拿到的分別是雜訊和NaN(Not a Number)。

對比雜訊和NaN的位置,很自然的聯想到可能是需要兩幅一起處理,

最自然的方式自然是異或(XOR),果不其然:拿到了結果——畢竟是德國人組織的比賽,中國大學的比賽應該會迴避這個敏感的面值吧。

接下來要偽造全息碼也很簡單,直接把我幾年前用G-S演算法寫過的matlab函數代碼搜出來,分分鐘拿到:隨手生成了一個550面值,拿到全息圖再做一個異或。

附上Matlab源碼:

%% load hologram provided from the challenge and displaynimg1 = imread(Hologram_1.png);nimg2 = imread(Hologram_2.png);nimg3 = imread(Hologram_3.png);nimg3_flip = flip(img3,2);nfigure;subplot(1,3,1)nimshow(img1);title(hologram 1); nsubplot(1,3,2)nimshow(img2);title(hologram 2); nsubplot(1,3,3)nimshow(img3);title(hologram 3); nn%% Step 1: decryption of the first hologram by FFT nff1=fftshift(fft2(img1));nfigure;imshow(abs(ff1),[0 500])ntitle(decryption of hologram 1); nn%% Step 2: decryption of the next two holograms by FFT nfigure;subplot(1,3,1)nff2=fftshift(fft2(img2));nimshow(abs(ff2),[0 500])ntitle(FFT of holo 2); nnsubplot(1,3,2)nff3=fftshift(fft2(img3_flip));nimshow(abs(ff3),[0 500])ntitle(FFT of holo 3); nnsubplot(1,3,3)nff4 = fftshift(fft2(xor(img3_flip,img2)));nimshow(abs(ff4),[0 500])ntitle(decryption of holo 2&3 by XOR & FFT); nn%% Step 3: Counterfeit of a customized hologramnI = abs(ff4);nI(66:110,44:66)=I(66:110,66:88);nI(146:190,190:212)=I(146:190,168:190);nfigure;subplot(1,3,1);nimshow(I,[0 500]);title(counterfeit 550 based on previous 250); nnphase = GSD(I); % Gerchberg?CSaxton algorithmnsubplot(1,3,2)nimshow(phase);title(Phase generated by G-S algorithm); ncf = phase>mean2(phase);ncf(1:22,1:22)=0;ncf(235:end,1:22)=0;ncf(1:22,235:end)=0;ncf = xor(cf,img3_flip);ncf = flip(cf,2);nnsubplot(1,3,3)nimshow(cf);title(Final barcode hologram)n%% verification of the counterfeitn% cf = imread(conterfeit_holo.bmp);n% ffcf=fftshift(fft2(cf));n% figure;subplot(1,2,1)n% imshow(abs(ffcf),[0 500]);title(FFT of the auxiliary hologram (holo 2))n% ffcf2 = fftshift(fft2(xor(img3_flip,flip(cf,2))));n% subplot(1,2,2);imshow(abs(ffcf2),[0 500]);title(verification of generated hologram);n

自信滿滿地提交答案去參賽,本以為多少能混個小獎。事實證明我還是圖樣Tu森破了,人家做研究的不光弄出了直觀結果,還做了定量的分析。

貼一個得獎團隊的report截圖吧:(附報告鏈接:https://www.dropbox.com/s/15pbw3lwey8n5kn/FAU_OpenResearchChallenge_Report_Team_Tartu.pdf?dl=0)

人家上來直接做了幾種演算法效果的參照,理菊服。

雖然無功而返,但是至少從中吸取到一點微小的經驗,那就是哪怕簡單的問題,也要做到精細入微,才能體現researcher和engineer的差距。回想起幾天前跟一個CTO的電話交流,也是體會到自己的工作太過於工程而缺乏深入的鑽研了。當然,主要原因還是因為自己深入研究過的專業很窄, 廣泛涉獵的領域自然還浮在表面,還需要時間來積累和磨礪。

推薦閱讀:

Matlab2012a(32/64位)
為什麼談論深度學習工具時,很少有人討論matlab的神經網路工具包?
如何用matlab在不用循環語句的情況下刪除包含某些特定字元的行?
機器學習筆記6 —— Matlab編程基礎
MATLAB圖像處理中的小波變換

TAG:全息光学 | MATLAB | 图像处理 |