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 가방 은 정말 좋 습 니 다.
결론:결과 의 정확도 가 높 지 않 기 때문에 분류 기 에서 최적화 하거나 더 좋 은 특징 추출 방식 을 찾 을 수 있다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.