程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python image texture segmentation

編輯:Python
1️⃣ Job requirements

Separate the two different types of texture areas on the left and right in the following figure , The output result of the method is a binary image of the same size as the image , On the left for 0, On the right is 1, Or vice versa , Grey border lines are not considered in the design method , Self removal .

2️⃣ Implementation source code
import matplotlib.image as mpimgimport matplotlib.pyplot as pltimport numpy as npfrom cv2 import cv2from sklearn.multiclass import OneVsRestClassifierfrom sklearn.svm import SVRfrom skimage import feature as skftfrom PIL import Image,ImageDraw,ImageFontclass Texture(): #n_point Select the number of pixels around the central pixel  #radius Radius of the selected area  def __init__(self): self.radius = 1 self.n_point = self.radius * 8 # Load grayscale image  def loadPicture(self): train_index = 0 test_index = 0 train_data = np.zeros((10, 171, 171)) test_data = np.zeros((8, 171, 171)) train_label = np.zeros(10) test_label = np.zeros(8) for i in np.arange(2): image = mpimg.imread('dataset1/'+str(i)+'.tiff') data = np.zeros((513, 513)) data[0:image.shape[0], 0:image.shape[1]] = image index = 0 # Picture division 9 block ,5 Block training 4 Block prediction  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 # Texture detection  def texture_detect(self): train_data, test_data, train_label, test_label = self.loadPicture() n_point = self.n_point radius = self.radius train_hist = np.zeros((10, 256)) test_hist = np.zeros((8, 256)) #LBP feature extraction  for i in np.arange(10): # Use LBP Method to extract the texture features of the image . lbp=skft.local_binary_pattern(train_data[i], n_point, radius, 'default') # Histogram of statistical image  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(8): 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 # Training classifier SVM Support vector machine classification  def classifer(self): train_data, test_data, train_label, test_label = self.loadPicture() train_hist, test_hist = self.texture_detect() # structure SVM Support vector machine  svr_rbf = SVR(kernel='rbf', C=1e3, gamma=0.1) model= OneVsRestClassifier(svr_rbf, -1) model.fit(train_hist, train_label) image=cv2.imread('dataset1/image.png',cv2.IMREAD_GRAYSCALE) image=cv2.resize(image,(588,294)) img_ku=skft.local_binary_pattern(image,8,1,'default') thresh=cv2.adaptiveThreshold(image,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2) # Recognize and classify images  img_data=np.zeros((1,98,98)) data=np.zeros((294,588)) data[0:image.shape[0],0:image.shape[1]]=image img = Image.open('texture.png') draw = ImageDraw.Draw(img) # Set font and size  myfont = ImageFont.truetype('C:/windows/fonts/Arial.ttf', size=180) # Set font color  fillcolor = "#008B8B" # For reading pictures size, That is, width and height  width, height = img.size # Divide the image into nine blocks by rows and columns  for row in np.arange(3): for col in np.arange(6): img_data[0,:,:]=data[98*row:98*(row+1),98*col:98*(col+1)] lbp= skft.local_binary_pattern(img_data[0], 8, 1, 'default') max_bins=int(lbp.max()+1) img_hist, _ = np.histogram(lbp, normed=True, bins=max_bins, range=(0, max_bins)) predict=model.predict(img_hist.reshape(1,-1)) if(predict==0): draw.text((width/6, height/6), '0', font=myfont, fill=fillcolor) data[98*row:98*(row+1),98*col:98*(col+1)]=0 else: draw.text((2*width /3, height/6), '1', font=myfont, fill=fillcolor) data[98*row:98*(row+1),98*col:98*(col+1)]=255 plt.subplot(211) plt.imshow(img_ku,'gray') #plt.subplot(312) #plt.imshow(thresh,'gray') plt.subplot(212) plt.imshow(img) plt.show()if __name__ == '__main__': test = Texture() # Calculate the classification accuracy  accuracy = test.classifer() #print('Final Accuracy = '+str(accuracy)+'%')
3️⃣ experimental result

The picture above shows the result LBP Image after operator feature extraction , The following figure uses SVM The result of texture classification , The same as the predicted upper left texture is marked as 0, The same as the above figure on the right is marked as 1.

Experiment source code + The report

stay Linux In the major distributions of ,Ubuntu And its derivatives have always enjoyed the reputation of being user-friendly .Ubuntu It's an open source operating system , Its system and software can be found on the official website (http://cn.ubuntu.com) As a free download , Detailed installation instructions are provided .


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved