データ強化方針:
オンラインモード-トレーニング
ランダムにカット(完全にランダム、中央の+の四隅)作物は、あなたができます
DEF(IMG、スケール= [0.8、1.0]、比= [3/4、4 /をrandom_crop 3。。。 。]、resize_w = 100、resize_h = 100):
"" "
ランダムにトリミング
:PARAM IMG:
:PARAMスケール:スケール
:PARAM比
:PARAM resize_w:
:PARAM resize_h:
:リターン:
" ""
aspect_ratio Math.sqrt(= np.random.uniform(*比))
W = aspect_ratio 1 *
H = 1 / aspect_ratioの
src_h、のsrc_wとimg.shape = [2]
バインド=分((フロート(のsrc_wと)/ src_h)/(W ** 2)、
(フロート(src_h)/のsrc_w及び)/(H ** 2))
scale_max =分(スケール[1]、結合)
scale_min =分(スケール[0]、結合)
src_wとsrc_h * = TARGET_AREA np.random.uniform(scale_min、
scale_max)
Math.sqrt =(TARGET_AREA)のtarget_size
W = INT(W *のtarget_size)
H = INT(H *のtarget_size)
I = np.random.randint(0、 。のsrc_w及び- W + 1)
J = np.random.randint(0、src_h - H + 1)。
IMG = IMG [J:J + Hは、私はW +]
IMG = cv2.resizeを(IMG、(resize_w、resize_h ))
IMG戻り
、DEFのrule_crop(IMGをbox_ratio =(3/4、3/4)、LOCATION_TYPE = 'LT'、resize_w = 100、resize_h = 100):.
"" "
作物直接元に特定の規則に従って操作サイズ用画像なし
:PARAM IMG:
:PARAM box_ratio:剪断比(幅の比、高さ比)
:PARAM LOCATION_TYPE:=で特定の位置:次のいずれか:
LRが左コーナー
RT:右上角
LB:左下角
RB:右下角
CC:中心
:PARAM resize_w:输出图的幅
:のparam resize_h:输出图的高さ
:リターン
:""」
'、( 'LT'、 'RT'でLOCATION_TYPEを主張LB」、 'RB'、 'CC')は、 '場所を持っている必要があります。'
is_gray = Falseの
場合LEN(img.shape)== 3:
H、W、C = img.shape
のelif LEN(img.shape)== 2:
= img.shape W H、
is_gray =真
crop_w、crop_h = INT( W * box_ratio [0])、INT(時間*のbox_ratio [1])
crop_img = np.zeros([10、10])
LOCATION_TYPE場合== 'LT':
crop_img = IMG [:crop_h:crop_w、:]もし、crop_h:他のimg [をis_grayません。
crop_img = IMG [:crop_h :, W - crop_w :,:]他のIMG is_grayない場合[:crop_h :, W - crop_w:]
ELIFのLOCATION_TYPEを== 'LB':
crop_img = IMG [H - crop_h :,:crop_w、 :]場合のimg他のないis_gray [H - crop_h :,:crop_w]
ELIFのLOCATION_TYPE == 'RB':
crop_img = IMG [H - crop_h :, W - crop_w :,:] is_grayない他のimg [H場合- crop_h。 、W - crop_w:]
ELIFのLOCATION_TYPE == 'CC':
start_h =(H - crop_h)// 2
start_w =(W - crop_w)// 2
crop_img = IMG [start_h:start_h + crop_h、start_w:start_w + crop_w、 :]場合のimg他のないis_gray [
start_h:start_h + crop_h、
start_w:start_w + crop_w]
= cv2.resizeをリサイズ(crop_img、(resize_w、resize_h))
リサイズ返す
水平フリップフリップ
DEFのrandom_flip(IMG、MODE = 1):
"" "
ランダムに反転
:PARAMのIMG:
:PARAMモデル:水平フリップ= 1/0 = = -1垂直/水平及び垂直
:リターン:
" ""
MODEをアサート中(0 ,. 1、-1)、 "MODEは適切ではない"
フリップnp.random.choice =(2)* 2から1#-1 / 1。。
IF MODE == 1:
IMG IMG = [フリップ:、:: 、:]
ELIFモード== 0:
IMG IMG = [フリップ::、:、:]
ELIFモード== -1:
IMG IMG = [::フリップフリップ::、:]
IMG戻り
DEFフリップを(IMG、MODE = 1):
"" "
フリップ
:PARAMのIMGを:
:PARAMのMODE = 1水平垂直= 0 / -1 =水平/垂直反転
:リターン:
「」」
アサートでMODE(0 ,. 1、-1)、 "MODEは適切ではない"
リターンcv2.flip(IMG、MODE = flipCode)
2オフラインモード
2.1ランダム摂動
ノイズ(ガウス、カスタム)騒音
DEFのrandom_noise(IMG、rand_range = (3、20)):
"" "
ランダムノイズ
:PARAM IMG:
:PARAM rand_range:(MIN、MAX):
リターン:
" ""
IMG = np.asarray(IMG、np.float)
シグマ*(random.randintを= rand_range)
NOSIEのnp.random.normal =(0、シグマ、サイズ= img.shape)
IMG = + NOSIE
IMG = np.uint8(np.clip(IMG、0、255))
のリターンのimg
フィルタ(ガウシアン平滑化、平均値、中央値、最小値、最大値、二国間、導か運動)
#は、様々なフィルタリング原理を説明:HTTPS://blog.csdn.net/hellocsz/article/details/80727972
DEF gaussianBlue(IMG、 = KS、1.5 STDEVため=)(7 ,. 7):
"" "
ガウスぼかし、画像がシャープなノイズを除去するために平滑化することができる
:PARAM IMG:
:PARAM KS:畳み込みカーネル
:PARAMのSTDEV:標準偏差
:返します:
" ""
cv2.GaussianBlur返す(IMGを、(7 ,. 7)、1.5ため。)
2.2転換
回転rorate
DEF回転(IMG、角度、スケール= 1.0):
"" "
回転
:PARAMのIMG:
:PARAM角度:回転角度> 0を反時計回りに、
:PARAMスケール:
:戻ります:
"" "
高さ、幅= img.shapeの[2]#画像取得幅と高さ
中心=(幅/ 2、高さ / 2)#1 画像を撮影中点
M = cv2.getRotationMatrix2D(中央、角度、スケール) #回転行列のポイント周辺の画像を取得する
(第2の引数#1 cv2.warpAffine)を変換行列であり、3番目のパラメータは、出力画像のサイズは
= cv2.warpAffine(IMG、M、回転 (高さ、幅))
回転戻り
DEFのrandom_rotate(IMG、angle_range =( - 10、10)):
"" "
ランダム回転
:PARAM IMG:
:PARAM angle_range:回転角度範囲(最小、最大)> 0が反時計示し、
:リターン:
" ""
高さ、幅= img.shapeの[2]#は、画像の高さと幅取得
中心=(幅/ 2、撮影高さ/ 2)#中点画像
ランダム=角度。randrange(* angle_range 1)
M = cv2.getRotationMatrix2D(中心角、1.0 )# 回転行列のポイント周辺の画像を取得する
(第2の引数#1 cv2.warpAffine)は変換行列であり、3番目のパラメータは、出力画像のサイズが
= cv2.warpAffine回転しました(IMG、M、(高さ、幅))
回転さが戻る
シフトオフセット
(IMG、X_OFFSET、Y_OFFSET)シフトDEF:
"" "
シフト、右、上下
:PARAM IMGを
示し、右側に> 0:PARAM X_OFFSETシフトPX、<0が左方向を表します
:PARAM Y_OFFSET:> 0 0が上方を示し、<オフセット下方PXを表す
リターン:
"" "
H、W、_ = img.shape
M = np.array([1、0、X_OFFSET]、[0、。 。1、Y_OFFSET]、DTYPE = np.float)
戻りcv2.warpAffine(IMG、M、(W、H))
捻らスキュー
...
ズームスケール
#HTTPSから://blog.csdn.net/weixin_43360384/article/details/84871521
デフresize_img(IMG、resize_w、resize_h):
高さ、幅= img.shapeの[2]#获取图片的高和宽
戻りcv2.resize(IMG、(resize_w、resize_h)、補間= cv2.INTER_CUBIC)
RGB / BGR - > HSV
DEF rgb2hsv_py(R、G、B):
R、G、B = R / 255.0、G / 255.0、B / 255.0
MX = MAX(R、G、B)
MN =分(R、G、B)
M = MX-MN
MX == MN場合:
時間= 0
ELIFのMX == R:
もしG> = B:
H =((GB)/ M)* 60
他:
H =((GB)/ M)* 60 + 360
ELIF MX == G:
H =((BR)/ M)* 60 + 120
ELIFのMX == B:
H =((RG)/ M)* 60 + 240
:MX == 0の場合
、S = 0
さもなければ:
秒= M / MX
V = MX
V = np.zeros((H、W)、np.float32)
R、G、 B = cv2.split(IMG)
戻りH、S、V
:デフrgb2hsv_cv(IMG)
https://blog.csdn.net/qq_38332453/article/details/89258058から#
H = img.shape [0]
= img.shape [1] W
H = np.zeros((H、 W)、np.float32)
S = np.zeros((H、W)、np.float32)
R、G、B = R / 255.0、G / 255.0、B / 255.0
範囲(0でiについて、H)。
範囲内のJ(0、W)のために:
MX = MAX((B [I、J]、G [I、J]、R [I、J]))
MN =分((B [I、J]、G [I、J]、R [I、J]))
V [I、J] = MX
もしV [I、J] == 0:
S [I、J] = 0
他:
S [I、J] =(Vの[I、J] - MN)/ V [I、J]
もしMX == MN:
H [I、J] = 0
ELIF V [I、J] == R [I、J]:
もしG [I、J]> = bの[I、J]。
H [I、J] =(60 * ((G [I、J]) - B [I、J])/(V [I、J] - MN))
他:
H [I、J] =(60 *((G [I、J]) - B [I、J])/(V [I、J] - MN))+ 360
のelif V [I、J] == G [I、J]:
H [I、J] = 60 *((B [I、J]) - R [I、J])/(V [I、J] - MN)+ 120
のelif V [I、J] == B [I、J]:
H [I、J] = 60 *((R [I、J]) - G [I、J])/(V [I、J] - MN)+ 240
H [I、J] = H [I、J] / 2
戻りH、S、Vの
画像の重ね合わせ融合
DEF addWeight(SRCL、アルファ、SRC2、ベータ、ガンマ):
"" "
G(X)=(1 - α)F0(X)+αf1(X)は、異なる値の#→(0,1)あなたは、異なる効果を達成することができます
DST = SRCL *アルファ+のSRC2 *ベータ+ガンマ
:PARAMのSRCL:IMG1
:PARAMアルファ:
:PARAMのSRC2:IMG2
:ベータPARAM:
:PARAMガンマ:
:リターン:
"" "
src2.shapeアサートsrc1.shap ==
cv2.addWeightedを返す(SRCL、アルファ、SRC2、ベータ、ガンマ)
ディザリング(輝度\色\飽和\コントラスト)ジッタカラー
DEFのadjust_contrast_bright(IMG、コントラスト= 1.2、明るさ= 100):
"" "
明るさとコントラストを調整
DSTはIMG *輝度コントラスト+ =
:のparam IMG:
:のparamコントラスト:大きな明るくコントラスト
:PARAM輝度:明るさ100〜0
:リターン:
"" "
それは中断するよう#0-255は、画素値を超えた
リターンnp.uint8(np.clip((コントラスト* IMGを輝度+)、0、255))
DEFのpytorch_color_jitter(IMG):
torchvision.transforms.ColorJitter(明るさ= 0を返す、コントラスト= 0、= 0彩度、色相= 0)
3D幾何変換