python 은 LBP 방법 으로 이미지 텍 스 처 특징 을 추출 하여 분류 하 는 절 차 를 실현 합 니 다.

제목 설명
이 박문 은 디지털 이미지 처리 의 큰 작업 이다.
제목 설명:40 장의 서로 다른 스타일 의 무늬 그림 을 지정 하고 크기 는 512*512 이 며 각 그림 을 크기 가 같은 9 조각 으로 나 누 어 그 중의 5 조각 을 훈련 집 으로 하고 나머지 4 조각 을 테스트 집 으로 하여 적당 한 모델 을 구축 하여 그림 의 분 류 를 실현 하도록 요구한다.
그림 은 다음 그림 과 같다.

분석:데이터 세트 가 너무 작 기 때문에 신경 망 모델 은 이러한 이미지 처리 에 적합 하지 않 습 니 다.이미지 의 무늬 정 보 를 추출 하 는 방법 을 찾 아야 합 니 다.본 고 는 LBP 의 방법 으로 이미지 의 무늬 정 보 를 추출 한 다음 에 직사 도 를 이미지 의 특징 으로 전환 한 다음 에 여러 가지 분류 방법 으로 분류 합 니 다.
환경.
python2.7,jupyter notebook,anaconda
데이터 세트 주소
이루어지다
데이터 읽 기
Numpy 패키지 배열 작업 API 포맷 데이터

def loadPicture():
  train_index = 0;
  test_index = 0;
  train_data = np.zeros( (200,171,171) );
  test_data = np.zeros( (160,171,171) );
  train_label = np.zeros( (200) );
  test_label = np.zeros( (160) );
  for i in np.arange(40):
    image = mpimg.imread('picture/'+str(i)+'.tiff');
    data = np.zeros( (513,513) );
    data[0:image.shape[0],0:image.shape[1]] = image;
    #             
    index = 0;
    #        
    for row in np.arange(3):
      for col in np.arange(3):
        if index<5:
          train_data[train_index,:,:] = data[171*row:171*(row+1),171*col:171*(col+1)];
          train_label[train_index] = i;
          train_index+=1;
        else:
          test_data[test_index,:,:] = data[171*row:171*(row+1),171*col:171*(col+1)];
          test_label[test_index] = i;
          test_index+=1;
        index+=1;
  return train_data,test_data,train_label,test_label;
특징 추출
LBP 특징 추출 방법

radius = 1;
n_point = radius * 8;

def texture_detect():
  train_hist = np.zeros( (200,256) );
  test_hist = np.zeros( (160,256) );
  for i in np.arange(200):
    #  LBP           .
    lbp=skft.local_binary_pattern(train_data[i],n_point,radius,'default');
    #        
    max_bins = int(lbp.max() + 1);
    #hist size:256
    train_hist[i], _ = np.histogram(lbp, normed=True, bins=max_bins, range=(0, max_bins));

  for i in np.arange(160):
    lbp = skft.local_binary_pattern(test_data[i],n_point,radius,'default');
    #        
    max_bins = int(lbp.max() + 1);
    #hist size:256
    test_hist[i], _ = np.histogram(lbp, normed=True, bins=max_bins, range=(0, max_bins));


  return train_hist,test_hist;
훈련 분류 기
SVM 은 벡터 분류 지원.

import matplotlib.image as mpimg
import matplotlib.pyplot as plt
import numpy as np
from sklearn.multiclass import OneVsRestClassifier
from sklearn.svm import SVR
from skimage import feature as skft
train_data,test_data,train_label,test_label= loadPicture();
train_hist,test_hist = texture_detect();
svr_rbf = SVR(kernel='rbf', C=1e3, gamma=0.1);
OneVsRestClassifier(svr_rbf,-1).fit(train_hist, train_label).score(test_hist,test_label)
실험 테스트 집합 결과 의 정확 도 는 90.6%이다.

처음으로 python 의 numpy 가방 을 사 용 했 습 니 다.그 중의 api 에 대해 잘 모 르 고 코드 도 최적화 할 수 있 습 니 다.그 중에서 matlab 의 행렬 작업 과 많이 다 르 지만 기계 학습 에 관 한 scikit learn 가방 은 정말 좋 습 니 다.
결론:결과 의 정확도 가 높 지 않 기 때문에 분류 기 에서 최적화 하거나 더 좋 은 특징 추출 방식 을 찾 을 수 있다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기