# -*- coding: utf-8 -*-
#2018-2-19 14:30:30
#Author:Fourmi_gsj
import cv2
import numpy as np
import pylab as pl
from PIL import Image
import skimage.io as io
from skimage import data_dir,data,filters,color,morphology
import matplotlib.pyplot as plt
from math import exp,floor
import os
#"/home/fourmi/桌面/fourmi/DRIVE/test/images"
PICTURE_PATH="/home/fourmi/桌面/fourmi/DRIVE/training/images"
#"/home/fourmi/桌面/fourmi/DRIVE/training/1st_manual"
PICTURE_PATH0 = "/home/fourmi/桌面/fourmi/DRIVE/test/1st_manual"
"*********************第一部分特征提取(图像处理)***************************************"
def load_image(): cv2.imshow("original",img)
gray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
return img,gray def get_Image():#循环读取对应文件的图片
for i in range(21,41):
path = PICTURE_PATH+"/"+str(i)+"_"+"training"+".tif"
path0 = PICTURE_PATH0+"/"+str(i)+"_"+"manual1"+".gif"
#Gabor(path)
#img = cv2.imread(path0)
img = ImageToMatrix(path0)
gray = img
#gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#SIFT(img,gray)
#SURF(img,gray)
#cv2.waitKey(0)
return path,path0,img,gray def Gabor(img):
#using Gabor
real,imag = filters.gabor(img,frequency = 1)
return real
"""
plt.figure('GABOR')
plt.subplot(121)
plt.imshow(img0)
plt.subplot(122)
plt.imshow(real,plt.cm.gray)
#plt.figure('the imag')
#plt.imshow(imag,plt.cm.gray)
plt.show()
""" def Hessian(img):
#using Hessian
# img0 = io.imread(path) real = filters.hessian(img, scale_range=(1, 10), scale_step=0.05, beta1=0.04, beta2=0.04)
return real
"""
plt.figure('Hessian')
plt.imshow(real)
plt.show()
""" def SIFT(img,gray):
#using SIFT
sift = cv2.xfeatures2d.SIFT_create()
keypoints, descriptor = sift.detectAndCompute(gray,None) cv2.drawKeypoints(image = img,
outImage = img,
keypoints = keypoints,
flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS,
color = (51,163,236))
cv2.imshow("SIFT",img)
cv2.waitKey(0) def SURF(img,gray):
#using SURF
surf = cv2.xfeatures2d.SURF_create()
keypoints, descriptor = surf.detectAndCompute(gray,None) cv2.drawKeypoints(image = img,
outImage = img,
keypoints = keypoints,
flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS,
color = (51,163,236))
real = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow("SURF",real)
cv2.waitKey(0)
return real def Morphology(img):
#using Morphology
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3, 3))
eroded = cv2.erode(img,kernel)
dilated = cv2.dilate(img,kernel) #NpKernel = np.uint8(np.ones((3,3)))
#Nperoded = cv2.erode(img,NpKernel)
#cv2.imshow("Eroded by NumPy kernel",Nperoded); kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5, 5))
closed = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
opened = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
cv2.imshow("Close Image",closed);
cv2.imshow("Open Image", opened);
return eroded ,opened,closed,dilated def GaussianBlurSize(GaussianBlur_size):
#using GaussianBlurSize
global KSIZE
KSIZE = GaussianBlur_size * 2 +3
print KSIZE, SIGMA
dst = cv2.GaussianBlur(gray, (KSIZE,KSIZE), SIGMA, KSIZE)
cv2.imshow(window_name,dst) def GaussianBlurSigma(GaussianBlur_sigma):
#using GaussianBlurSigma
global SIGMA
SIGMA = GaussianBlur_sigma/10.0
print KSIZE, SIGMA
dst = cv2.GaussianBlur(gray, (KSIZE,KSIZE), SIGMA, KSIZE)
cv2.imshow(window_name,dst) def window_gaussian():
SIGMA = 1
KSIZE = 15
GaussianBlur_size = 1
GaussianBlur_sigma = 15
max_value = 300
max_type = 6
window_name = "GaussianBlurS Demo"
trackbar_size = "Size*2+3"
trackbar_sigema = "Sigma/10"
cv2.namedWindow(window_name)
cv2.createTrackbar( trackbar_size, window_name, \
GaussianBlur_size, max_type, GaussianBlurSize )
cv2.createTrackbar( trackbar_sigema, window_name, \
GaussianBlur_sigma, max_value, GaussianBlurSigma )
GaussianBlurSize(1)
GaussianBlurSigma(15)
cv2.waitKey(0) def Frangi(img):
#using Frangi
real = filters.frangi(img, scale_range=(1, 10), scale_step=0.05, beta1=0.04, beta2=0.04, black_ridges=True)
return real
"""
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3, 3))
dilated = cv2.dilate(real,kernel)
eroded = cv2.erode(img,kernel)
closed = cv2.morphologyEx(real, cv2.MORPH_CLOSE, kernel)
opened = cv2.morphologyEx(real, cv2.MORPH_OPEN, kernel)
plt.figure('FRANGI')
plt.subplot(131)
plt.imshow(closed)
plt.subplot(132)
plt.imshow(opened,plt.cm.gray)
plt.subplot(133)
plt.figure('FRANGI')
plt.imshow(real)
plt.show()
""" def ImageToMatrix(path):
im = Image.open(path)
width,height = im.size
im = im.convert("L")
data = im.getdata()
data = np.matrix(data,dtype='float')
new_data = np.reshape(data,(height,width))
new_im_data = np.uint8(np.array(new_data))
return new_im_data def MatrixToImage(data):
data = data*255
new_im = Image.fromarray(data.astype(np.uint8))
return new_im def get_imlist(path): #此函数读取特定文件夹下的tif/gif格式图像
return [os.path.join(path,f) for f in os.listdir(path) if f.endswith('.tif')] #以下代码看可以读取文件夹下所有文件
# def getAllImages(folder):
# assert os.path.exists(folder)
# assert os.path.isdir(folder)
# imageList = os.listdir(folder)
# imageList = [os.path.abspath(item) for item in imageList if os.path.isfile(os.path.join(folder, item))]
# return imageList # print getAllImages(r"D:\\test")
"***************************第二部分将图片数据保存为txt文件****************************************"
def Img2Txt():
#图片生成txt
data = np.empty((22,1,565*584))
for i in range(1,21):#20
path0 = PICTURE_PATH0+"/"+str(i)+"_"+"manual1"+".gif"
print path0
#path = PICTURE_PATH+"/"+str(i)+"_"+"test"+".tif"
#path = PICTURE_PATH+"/"+str(22)+"_"+"training"+".tif"
#img = cv2.imread(path)
img = ImageToMatrix(path0)
#img[:,:,2] = 0
#gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#real = gray
#real = Morphology(gray)
#real = Gabor(gray)
#real = Frangi(gray)
#real = Hessian(gray)
img_ndarray=np.asarray(img)
#img_ndarray=np.asarray(real,dtype='float64') #将图像转化为数组并将像素转化到0-1之间
#data[i]=np.ndarray.flatten(img_ndarray*10) #将图像的矩阵形式转化为一维数组保存到data中
#A=np.array(data[i]).reshape(565*584,1)
#pl.savetxt('test_label'+str(i)+'.txt',A,fmt ="%.00f") #将矩阵保存到txt文件中 def ImgSplit(path):
img =cv2.imread(path)
b,g,r = cv2.split(img)
cv2.imshow('Red',r)
cv2.imshow('Green',g)
cv2.imshow('Blue',b)
cv2.waitKey(0)
return g#同时获得绿色通道图片 def featureExtract(path):
g = ImgSplit(path)#图片的通道分离
fra = Frangi(g)
hes = Hessian(g)
ga = Gabor(g)
eroded ,opened,closed,dilated = Morphology(g)
cv2.imshow("Eroded Image",eroded);
cv2.imshow("Dilated Image",dilated);
cv2.imshow("Origin", g)
cv2.imshow('Frangi',fra)
cv2.imshow('Hessian',hes)
cv2.imshow('Gabor',ga)
cv2.waitKey(0)
if __name__=='__main__':
path = PICTURE_PATH+"/"+str(22)+"_"+"training"+".tif"
featureExtract(path)

图像特征的提取(gaussian,gabor,frangi,hessian,Morphology...)及将图片保存为txt文件的更多相关文章

  1. 【Python图像特征的音乐序列生成】一个更科学的图片分类参考方法,以及一个看起来很好用的数据集

    数据集地址:http://www.imageemotion.org/ 论文地址:http://www.doc88.com/p-1905670442096.html

  2. 原来CNN是这样提取图像特征的。。。

    对于即将到来的人工智能时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的领域,会不会感觉马上就out了?作为机器学习的一个分支,深度学习同样需要计算机获得强大的学 ...

  3. VGG16提取图像特征 (torch7)

    VGG16提取图像特征 (torch7) VGG16 loadcaffe torch7 下载pretrained model,保存到当前目录下 th> caffemodel_url = 'htt ...

  4. CNN基础二:使用预训练网络提取图像特征

    上一节中,我们采用了一个自定义的网络结构,从头开始训练猫狗大战分类器,最终在使用图像增强的方式下得到了82%的验证准确率.但是,想要将深度学习应用于小型图像数据集,通常不会贸然采用复杂网络并且从头开始 ...

  5. 第三讲_图像特征与描述Image Feature Descriptor

    第三讲_图像特征与描述Image Feature Descriptor 概要 特征提取方法 直方图 对图片数据/特征分布的一种统计:对不同量进行直方图统计:可以表示灰度,颜色,梯度,边缘,形状,纹理, ...

  6. 特征点提取之Harris角点提取法

    1. 特征点提取的意义 2.角点 3. Harris角点检測的基本原理 4.Harris角点检測算法的步骤 5.Harris角点提取算法设计 <span style="font-siz ...

  7. 【图像算法】图像特征:GLCM灰度共生矩阵,纹理特征

    [图像算法]图像特征:GLCM SkySeraph Aug 27th 2011  HQU Email:zgzhaobo@gmail.com    QQ:452728574 Latest Modifie ...

  8. 机器学习进阶-图像特征sift-SIFT特征点 1.cv2.xfeatures2d.SIFT_create(实例化sift) 2. sift.detect(找出关键点) 3.cv2.drawKeypoints(画出关键点) 4.sift.compute(根据关键点计算sift向量)

    1. sift = cv2.xfeatures2d.SIFT_create() 实例化 参数说明:sift为实例化的sift函数 2. kp = sift.detect(gray, None)  找出 ...

  9. 视觉中的经典图像特征小结(一): 颜色直方图, HOG, LBP

    [普兒原创, 如有错误和纰漏欢迎指正. 更新中...] 1. 颜色直方图 颜色空间在本质上是定义在某种坐标系统下的子空间,空间中的每一个坐标表示一种不同的颜色.颜色空间的目的在于给出某种颜色标准,使得 ...

随机推荐

  1. 分布式中使用Redis实现Session共享(二)

    上一篇介绍了一些redis的安装及使用步骤,本篇开始将介绍redis的实际应用场景,先从最常见的session开始,刚好也重新学习一遍session的实现原理.在阅读之前假设你已经会使用nginx+i ...

  2. group_concat函数详解

    来自: http://hchmsguo.iteye.com/blog/555543 MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的 ...

  3. js获取网站根目录

    //js获取网站根路径(站点及虚拟目录),获得网站的根目录或虚拟目录的根地址         function getRootPath(){        var strFullPath=window ...

  4. nginx使用ssl模块配置HTTPS支持

    默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译时指定–with-http_ssl_module参数,安装模块依赖于OpenSSL库和一些引用文件,通常这些文件并不在同一个软件包中.通常这 ...

  5. CentOS源码安装搭建LNMP全过程(包括nginx,mysql,php,svn)【转】

    转自:http://blog.csdn.net/yanzi1225627/article/details/49123659 服务器环境为:CentOS6.5 64位 目标:搭建LNMP(Linux + ...

  6. 1021. Deepest Root (25) -并查集判树 -BFS求深度

    题目如下: A graph which is connected and acyclic can be considered a tree. The height of the tree depend ...

  7. CXF 5参考资料

    下载 描述 名字 大小 下载方法 本教程示例应用程序的源代码 CXF_Spring_Survey_Src.war 10 KB HTTP 关于下载方法的信息 学习 Apache CXF 的官方站点:提供 ...

  8. SpringCloud(3)---Eureka服务注册与发现

    Eureka服务注册与发现 一.Eureka概述 1.Eureka特点 (1) Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移. (2) Eureka 主管服务 ...

  9. 【转】ICCAVR TAB键设置

    转载于: http://blog.163.com/liuyunqian@yeah/blog/static/7039584320099159545292/ 在使用ICCAVR C编译器的时候会发现TAB ...

  10. BZOJ3782 上学路线

    设障碍个数为,\(obs\)则一般的容斥复杂度为\(O(2^{obs})\).但因为这个题是网格图,我们可以用DP解.设\(f[i]\)表示不经过任何障碍到达第\(i\)个障碍的方案数,转移时枚举可以 ...