發表文章

目前顯示的是有「Computer Vision」標籤的文章

Python 寫自動白平衡 - 完美反射核心

圖片
  最近上班遇到一些圖片顏色偏離原色, 身為影像工程從業者就會想自己寫 3A算法來校正。

不均勻光源下的優化 SSIM 演算法

圖片
  這篇是 SSIM 系列第三篇,接續前篇  使用 PyTorch 實做 2D 影像捲積 , 要來談一下 SSIM 如何在不均勻光源下優化 SSIM。

LeetCode 解題紀錄 221. Maximal Square 圖片中最大的正方形

圖片
繼  200. Number of Islands  後,又遇到一個影像處理的問題。 這題要用動態規劃來解,菜雞如我第一時間沒想到動態規劃, 但是後來也自己解出來了,紀錄一下我的解題心路歷程。 題目簡介: 給你一張尺寸為 m x n 像素且只包含(0,1)的圖片稱為 Matrix , 其中 1 代表有像素的區域,找出此張圖片中含有 1 的最大正方形區域面積。 第一階段想法:循序檢測法 把每個點都當作候選正方形的左上角, 先求 Row 再驗證每個 Col 是否符合正方形區域預想? 若有,就回傳正方形區域面積; 若無,就回傳 0。 假設圖片中有 N 個元素,這個想法的時間複雜度為: $$O(N^{2})$$ 但是我們會遇到一個特殊情況,當最大正方形在驗證失敗的候選正方形的的情況, 像是: 就很尷尬,其中 $$S_m$$ 不等於 6 的原因是本圖中最大正方形是交由 min(m, n) 決定, 所以不用檢查到 $$S_m = 6$$ 可以降低計算時間。 結果: Wrong Answer 第二階段:動態規劃法 所以我決定再不增加時間複雜度的情形下,由小到大、每個正方形都檢測。 使用動態規劃,每一步驟又拆成兩小步: 第一步:驗證對角線是否為 '1' ? 第二步:驗證相應 X, Y軸是否為 '1' ? 若有任一步檢測到 '0' ,則回傳步數 S 的平方當作正方形面積。 不過鑑於這個作法時間複雜度遇到 Worst Case (全為 '1' 的圖片時)仍為 $$O(N^{2})$$ 結果: Time Limited Error 第三階段:利用影像(數據)特性降低時間複雜度。 問自己一個問題: 最低滿足圖片中最大正方形的條件是什麼? 答案是任何大於(長/2)*(寬/2)的正方形, 因為本題目中不考慮重疊問題,所以用數學上來說: 一圖片尺寸為 m*n ,若有任意正方形面積大於(m/2 + k)(n/2 + k), 而 k 恆大於零的話,此正方形為圖片中最大的正方形就成立。 而候選次大正方形面積必定為(m/2 - k)(n/2 - k), 所以每個點出發後, 檢測 (m*n/4) + m + n - 1 個像素就知道這個正方形是不是最大的了。 結果: Accept

Structural Similarity(SSIM) 的 PyTorch 實現

圖片
SSIM 是一種指標,用於比較兩張圖的相異程度。 指標主要參考三個面向: 亮度 Luminance $$l(xy) = \frac{2\mu_x\mu_y+C1}{\mu^2_x\mu^2_y+C1}$$ 對比度 Contrast $$c(xy) = \frac{2\sigma_x\sigma_y+C2}{\sigma^2_x\sigma^2_y+C2}$$ 結構相似度 Structure $$s(xy) = \frac{\sigma_{xy}+C3}{\sigma_x\sigma_y+C3}$$

Occlusion-Net 用來解決物件遮蔽問題的 2D/3D 多視圖融合物件偵測方法

圖片
這是一個很有趣的方法,以我的觀點來看是跟 3D 點雲的 Multi-View 方法的延伸。 主要是把 3D 點雲特徵用投影方法投回 2D 影像, 利用 2D/3D 的融合特徵解決物件遮蔽的偵測問題。

Repulsion Loss 利用三項之力改善物件重疊問題

圖片
最近小弟接到公司派的任務, 主要負責解決物件重疊的問題。 這篇算是我的物件重疊解法啟蒙之作,提筆紀錄一下。  Repulsion Loss 主要是作者看到磁力作動所併發的想法,  (這說法跟牛頓他老爺子被林檎砸到有 87%像)  所以 Repulsion Loss 主要有三個力(Loss)組成: L_Attr          - 使 BBOX_pred 與配對到的 GT BOX 相近。 L_RepGT     - 使 BBOX_pred 遠離其他 GT BOX 。 L_RepBOX  - 使 BBOX_pred_i 遠離預測其他出不同類別的 BBOX_pred_i,                          可以避免因為距離太近,NMS 把框砍掉的問題。 (至於 NMS 機制可以看 這篇 ,我認為他講得很好。) Alpha 與 Beta 就有點 Focal Loss 的味道了, 兩數和被一所約束。 L_Attr L_Attr 的物理意義是使預測的框(BBOX_pred)與配對到的 GT BOX 接近。 要算 L_Attr 就要先定義兩項集合: {G} = 所有的 GT BOX 集合 {P}  = 所有正樣本的 Anchor 集合 這裡簡單解釋一下 {P},就是所有包含前景的 Anchor 們, 或是所有有物件、不是背景的 Anchor 們集合。 這邊我也疑惑了一下什麼正樣本,有 BBOX 不就代表有物件了嗎? 接下來用 G, P 集合造 G^P_Attr: G^P_Attr = argmax_G∈G IOU(G, P) 這個意義在於讓偵測到物件的每個 Anchor 都有一個家(GT BOX)。 但是 G^P_Attr 畢竟還是一個對應關係, 一個是 Anchor 、一個是 BBOX 還是不能算 Loss, 所以利用 P 去做 B^P,也就是基於 P 的 BBOX。  接著用 L1_Smooth 造 L_Attr: L_Attr 結案! L_RepGT L_RepGT 的物理意義是使預測的框(...