目錄

20200718 想法源起 20200719 我們在做什麼(一) 20200722 我們在做什麼(二) 20200725 竟然成為數學家(一) 20200729 竟然成為數學家(二) 20200801 竟然成為數學家(三) 20200805 不同職級(一) 20200808 不同職級(二) 20200812 趕客系列(一)為什麼讀大學? 20200815 趕客系列(二)不同大學學位跟工作的關係 20200819 趕客系列(三)大學的目的 20200822 趕客系列(四)大學為什麼要有主修 20200826 趕客系列(五)要挑選一個什麼樣的主修 20200829 沒有無緣無故的恨(一) 20200831 科普系列 - 數學與電影動畫製作(一) 20200902 沒有無緣無故的恨(二) 20200905 沒有無緣無故的恨(三) 20200907 科普系列 - 數學與電影動畫製作(二) 20200909 終身職位的評核 20200912 學術界吸引人的地方 20200914 科普系列 - 數學與電影動畫製作 (三) 20200916 學術界辛苦的地方(一) 20200919 學術界辛苦的地方(二) 20200921 科普系列 - 數學與電影動畫製作 (四) 20200923 大學的讀書成績有多重要 20200926 本科生研究機會 20200928 科普系列 - 數學與圖像修復(一) 20200930 用創新的方法去教育科學 20201003 參加研討會的重要 20201005 科普系列 - 數學與圖像修復(二) 20201007 教授與教學 20201010 研究是什麼(一) 20201012 科普系列 - 數學與圖像修復(三) 20201014 研究是什麼(二) 20201017 研究是什麼(三) 20201019 科普系列 - 數學與圖像修復(四) 20201021 如何閱讀研究論文 20201024 研究生應該修什麼課 20201026 科普系列 - 數學與圖像修復(五) 20201029 本科生的多主修多副修 20201102 科普系列 - 數學與數獨(一) 20201105 幾位教授(一) 20201109 科普系列 - 數學與數獨(二) 20201112 幾位教授(二) 20201116 科普系列 - 數學與數獨(三) 20201119 幾位教授(三) 20...

科普系列 - 數學與圖像修復(四)



用平均值修復圖像的問題

返回圖像處理的問題。我們希望修復回來的圖像是比較清晰,而不是模糊的。所以如果我們假設在邊界上只有兩種顏色,在圖像一邊是全黑(用力代表顏色),令一面是同一種灰色(在前面的例子我們用128代表),我們就會希望修復回來的圖像的象素點都只有全黑或者是在邊界上面的那一種灰色。可是,另外一個橢圓形偏微分方程的特性,就是說所有找回來的答案都會是順滑的(Smooth)。所以,我們就可以知道用這個平均值方式找回來的顏色將會分布在零跟128之間。就是說,即使在邊界上只有兩種顏色,使用平均值的方法來修復圖像總是會出現新的顏色。這兩個效果,在圖像修復的應用上都會令人非常失望,因為修復回來的圖像跟我們腦海中認知和希望找到的都非常不一樣。


上面我們提到,定義「類似」的方法可以用統計學裏面的眾數,中位數和平均值。在剛剛討論的情況,我們只是運用了平均值的方法。在簡單一個像素點的情況,我們看見眾數和中位數的表現好像很好。所以都可以直覺地認為找回4×4的圖像中間2×2位置的顏色,眾數和中位數的方法應該可以更有效地找回一幅跟我們腦海中認知所符合的圖像。但這兩個方法的問題,是我們需要解決一個非線性(Nonlinear)方程組。所謂非線性,就是說他不是線性(Linear)。這句說話聽起來非常廢話,可是這確是「非線性」的定義。只要我們定義了何謂線性,就知道這個方程組是否非線性了。我在這裏就不再仔細定義何謂線性,而只是簡單介紹為什麼眾數和中位數都不是一個線性的問題。主要原因,是因為這兩個計算裏面,我們都必須要將一些數字作出排列。這個按大至少或小自大排列的過程,並沒有方法將答案寫成某些係數乘那些數字再作加減。


當然,要解決非線性方程組也不是沒有辦法的。如果有修讀數值方法的,就知道牛頓也創造了一個用微積分方法找方程式的根的辦法 [1]。可是要使用這牛頓法,我們就必須要計算方程式的導數(Derivative)。而眾數及中位數這兩個函數,卻是不可微分(Non-differentiable)的。所以一般的牛頓法並不適合解決這兩個問題。


那有什麼辦法呢?其中一個方法,就是將這些問題重寫,將他們變成一個優化問題處理。


三個優化問題


我們先從比較簡單的情況討論。最簡單的情況,就是一個3×3圖像找回中間一個像素點顏色的問題。對用平均值定義「類似」的方法,我們可以將它寫成以下的優化問題。假設我們已知附近的m個數值為a(1), a(2), 直到a(m)。我們定義函數

f(x)=(a(1)-x)²+ (a(2)-x)²+…+ (a(m)-x)²

然後希望找這個函數的最小值。這個函數裏面每一個項(Term),都在計算x跟每一個已知數差距的平方。假如沒有了平方,有些時候x比a(1)大也可能比a(1)少,所以當我們找這個函數的最小值時候,f就很可能是一個非常負的負數。為了要把這個非常負的答案拿走,我們通常都會將距離用平方表示。所以找出來的x,就「差不多」距離每一個已知數都非常接近。注意的是,由於我們優化的並不是真的距離(而是他的平方),所以這個代表着m個已知數的代表x,並不一定是最接近這個數值集的數字。


我們特別喜愛平方的函數,由於每一項都是可以微分的。所以要優化這個函數,我們可以用微積分的辦法,計算f的導數。做一點計算,我們就可以發現,要優化這個函數, x就會是這些已知數的平均值。由於f是一個凹函數(Concave Up),平均值可以得到這個函數的最小值。所以,總結一下,要找出一些已知數的平均值,我們其實可以用那些已知數,用平方的辦法構造一個函數,再把它優化。聽起來好像繞了一大圈,做了很多「無謂」的事情。可是,以後我們就會看見,根據這個方法我們就可以把找眾數和中間數的問題寫成一些最小化問題,然後就可以用很多優化的技巧處理。




留言