再論顏色校正

2021-09-30 18:46:31 字數 3854 閱讀 6676

色塊肯定是因為校正矩陣把一定範圍內的值都對映到同乙個值了;

驗證:基於上篇的方法,取與標準值偏差很大的顏色作為輸入(比如input[2,0] = (14,14,14),與之對應的標準值為(52,52,52)),計算係數矩陣a,然後取(18,18,18)作為輸入,得到結果為(127,37,26),這個結果是根本無法接受。所以,矩陣a的計算有問題。這個問題就是病態方程組的問題了,關於病態方程組的理論和解決辦法,網上有n多文章,我就不贅述了,有興趣的可以去看看,而且這個病態矩陣問題還可以幫助理解l1、l2為什麼可以防止神經網路過擬合。請參考:l0、l1與l2範數、核範數

解決辦法:

從根本解決問題,引起這個問題的根本原因就是擬合的資料太少,導致求解出的係數矩陣嚴重過擬合,所以增加樣本資料,然後不再求解方程組的解析解,而是改用迭代求近似解。核心**:

# 轉換到lab空間

for element in color_value_list:

bgr =

(int

(element[4]

),int(element[3]

),int(element[2]

))lab_value = bgr2lab(bgr)

color_dict[element[1]

]= lab_value

[lab_value[0]

, lab_value[1]

, lab_value[2]

])else

:for element in color_value_list:

color_dict[element[1]

]=(int

(element[2]

),int(element[3]

),int(element[4]

))[int

(element[2]

),int(element[3]

),int(element[4]

)]) std_matrix = np.array(std_matrix)

return std_matrix

defrecorrect_color

(raw_img, poly_reg, lin_reg, out_path)

:"""

用係數矩陣a對影象進行顏色校正

"""w = raw_img.shape[0]

h = raw_img.shape[1]

input_data = create_inputdata(raw_img)

data = poly_reg.fit_transform(input_data)

corrected_data = lin_reg.predict(data)

data = np.uint8(np.clip(corrected_data,0,

255)

) data = np.array(data)

new_img = data.reshape(

(w, h,3)

) new_img = new_img[..

.,[2

,1,0

]]# 做一次色階調整

new_img = autobrightness(new_img)

cv2.imwrite(out_path, new_img)

return new_img

defcolor_recorrect()

:# 載入標準色卡資料

std_matrix = get_stdcolor_value(

)# 載入測試色卡影象,生成回歸輸入資料

img = cv2.imread(input_color_file,1)

card_imgs, color_img = img_split(img)

# 構造訓練資料和標籤

input_data =

std_data =

for index, img in

enumerate

(card_imgs)

: h, w = img.shape[0]

, img.shape[1]

h = h//

2 w = w//

2 data = create_inputdata(img[h -

5: h +

5, w -

5: w +5]

)[std_matrix[index]]*

len(data)

) input_data = np.array(input_data)

input_data = np.resize(input_data,

(900,3

))std_data = np.array(std_data)

std_data = np.resize(std_data,

(900,3

))poly_reg = polynomialfeatures(degree=1)

x_ploy = poly_reg.fit_transform(input_data)

lin_reg = linear_model.linearregression(

) lin_reg.fit(x_ploy, std_data)

# 顏色校正

再論雙分派

暴力雙分派速度快,可是當類增多時,代價依然很大。map雙分派在速度優化上有dynamic cast和static cast兩種選擇,loki把這個選擇做成了policy。矩陣雙分派速度上有天然的優勢,但是你要修改你的類。於是loki也把這個做成了policy供你選擇。矩陣雙分派的思想是,在你的cla...

再論向上轉型

向上轉型的好處,已經在這篇文章 這是乙個鏈結 的 中演示了,但是沒有說不好處。現在就說說不好處,以鏈結中的 為背景,animal a1 new lion animal a2 new mokeny new出來的lion和mokey物件向上轉型為animal物件,可以使用統一的eat 讓jvm去分辨到底...

原創 再論epoll

學習時間的過程終會有反覆,其中也包括一些錯誤,上午對於前一篇關於epoll的文章進行了增改,下午就覺得有些不妥,重新編輯感覺不太容易剝樓錯誤,現在有些新的變化在這裡重新論述。上午說的在epoll裡面進行耗時任務的時候做乙個任務排程器 比如當伺服器連線外部資源 這說明我只了解了epoll的一部份,沒有...