色塊肯定是因為校正矩陣把一定範圍內的值都對映到同乙個值了;
驗證:基於上篇的方法,取與標準值偏差很大的顏色作為輸入(比如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的一部份,沒有...