【画像処理】画像機械学習の前処理
前処理フィルタについて | 画像処理.com | キーエンス
元の画像
グレイスケール
膨張フィルタ
収縮フィルタ
平均化フィルタ
平均化フィルタ
#coding:utf-8 """ $jupyter notebook $for python3.x """ from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np from sklearn.cluster import KMeans from PIL import Image from PIL import ImageDraw from random import randint from os.path import exists from os import mkdir from math import fabs from random import random from copy import deepcopy from math import log from math import sqrt import cv2 import numpy as np from collections import namedtuple import csv INF = 1e30 def convert(img): """収縮フィルタ""" #画像のサイズ height = img.shape[0] width = img.shape[1] #変換後のリスト img2 = np.zeros((width, height), np.uint8) #変換--------------------------------------------------------------- for y in range(1,height-1): for x in range(1,width-1): tmp = 0.0 for a in range(y-1,y+2): for b in range(x-1,x+2): tmp += img[a,b] tmp /= 9 img2[y,x] = tmp #------------------------------------------------------------------- #画像を表示 cv2.imshow("image",img2) cv2.waitKey(0)#キーを押すと終了 cv2.destroyAllWindows() #画像を出力 file_name = "expansion_filter" cv2.imwrite(file_name+".jpg",img2) def main(): #特徴ベクトルの型の定義 vec = namedtuple('vec_info',['GBR','coordinate']) #画像を読み込み filename = "ika.png" img = cv2.imread(filename,0) #GLAY_SCALE画像を出力 file_name = "GRAY_SCALE"+filename cv2.imwrite(file_name+".jpg",img) #膨張フィルタ convert(img) if __name__ == '__main__': main()
膨張フィルタ
for y in range(1,height-1): for x in range(1,width-1): tmp = -INF for a in range(y-1,y+2): for b in range(x-1,x+2): tmp = max(tmp,img[a,b]) img2[y,x] = tmp
収縮フィルタ
for y in range(1,height-1): for x in range(1,width-1): tmp = INF for a in range(y-1,y+2): for b in range(x-1,x+2): tmp = min(tmp,img[a,b]) img2[y,x] = tmp
for y in range(1,height-1): for x in range(1,width-1): tmp = list() for a in range(y-1,y+2): for b in range(x-1,x+2): tmp.append(img[a,b]) print(tmp) img2[y,x] = sorted(tmp)[4]
端っこについては考察していない.
4マスで考えれば良いのかな?
特徴抽出はあくまで中央のものだから端っこはあまり重要ではない気がするが