声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类算法的家人,可关注我的VX公众号:python算法小当家,不定期会有很多免费代码分享~
图像特征提取是计算机视觉和图像处理的关键步骤,因为计算机不认识图像,只理解数字。通过特征提取,计算机便可以理解图像含义,实现真正意义上的“视觉智能”。
**图像特征提取的目的是从中提取有用信息,以便后续的分析和应用。**通过图像特征提取,可以实现数据降维、提高模型性能、简化计算、适用不同的应用场景等需求。
本期小当家带来12种超强的图像特征提取算法,不管是实际应用还是作为论文创新都是非常适用的!!!
代码获取请见文末
10种图像识别算法介绍
算法 | 功能 | 用途 |
---|---|---|
BIC | 用于图像的边界和内部区域分类,通过对图像进行像素分类来提取特征。 | 常用于图像分类和图像检索任务。 |
FOM | 评估图像分割算法性能的指标,通过比较分割结果和理想分割之间的差异来计算。 | 图像分割质量评估。 |
Gabor_total | 扩展的Gabor特征提取方法,可能包含不同尺度和方向的Gabor滤波器组合。 | 更全面的纹理分析和目标检测。 |
Gray | 灰度共生矩阵(GLCM)特征提取,通过分析图像灰度级的空间关系来提取纹理特征。 | 纹理分类、图像检索。 |
Haralick | 基于Haralick特征(从GLCM中提取),包括对比度、相关性、能量和同质性等。 | 纹理分析、医学图像处理。 |
Hu | Hu矩特征,通过计算图像的七个不变矩来提取形状特征。 | 形状匹配、目标识别。 |
LBP | 局部二值模式,用于描述图像局部纹理特征,通过比较每个像素与其邻域像素的灰度值来计算。 | 纹理分类、人脸识别。 |
Tamura | 基于Tamura纹理特征,包括粗糙度、对比度和方向性等。 | 纹理分析、图像分类。 |
TAS | 纹理分析和合成方法,可能包括多种纹理特征提取和生成技术。 | 纹理分类、图像合成。 |
Zernike | 基于Zernike矩的特征提取方法,描述图像的形状特征,通过计算一组正交多项式来获得。 | 图像匹配、目标识别、形状分析。 |
下面以BIC (Border/Interior Classification)为例,进行实验介绍。
实验介绍
BIC (Border/Interior Classification) 是一种图像特征提取方法,用于区分图像中的边界区域和内部区域。该方法通过对图像进行像素分类,提取出边界和内部区域的特征,从而为图像分类和检索任务提供有用的信息。
图像数据
使用一个包含脑部CT扫描图像的数据集,这些图像被组织在不同的文件夹中,代表不同的类别(如有无肿瘤的分类)。通过应用BIC特征提取方法,我从这些图像中提取了边界和内部区域的特征,并将这些特征保存到一个CSV文件中。这些特征数据将用于训练机器学习模型,以实现对脑部CT图像的分类和分析,从而提高疾病诊断的准确性和效率。
代码展示
以下是每个BIC算法模块的详细介绍:
- 图像特征提取
def multiple_img_features(img):
factor = 64
HI, HE = [0] * factor, [0] * factor
N,M = img.size
for x in range(N):
for y in range(M):
ind = int((img.getpixel((x, y)) / 255) * (factor - 1))
if (x == 0 or y == 0 or x + 1 == N or y + 1 == M):
HE[ind] += 1
else:
if (img.getpixel((x, y)) == img.getpixel((x, y - 1)) and
img.getpixel((x, y)) == img.getpixel((x, y + 1)) and
img.getpixel((x, y)) == img.getpixel((x - 1, y)) and
img.getpixel((x, y)) == img.getpixel((x + 1, y))):
HI[ind] += 1
else:
HE[ind] += 1
return HI + HE
通过遍历图像的每个像素,根据像素的边界和内部性质来构建直方图。最后返回两种类型的直方图的合并,分别表示边界(HE)和内部(HI)像素的特征。
- 构建特征向量
def get_image_feature_vector(image, positive):
BIC_results = multiple_img_features(image)
if positive == 0:
BIC_results = np.append(BIC_results, 0)
feature_set = BIC_results
if positive == 1:
BIC_results = np.append(BIC_results, 1)
feature_set = BIC_results
return feature_set
调用multiple_img_features函数来获取图像的特征,然后根据图像的类别(正面或负面)添加相应的标签。最后输出包含图像特征及其类别标签的向量。
- 批量处理图像特征向量
def get_all_image_feature_vectors(images, positive):
feature_sets = []
for image in images:
feature_set = get_image_feature_vector(image, positive)
feature_sets.append(feature_set)
return feature_sets
遍历图像列表,为每个图像调用get_image_feature_vector。最后输出返回包含所有图像的特征向量列表。
- 生成CSV文件
def create_csv_output(filename, zerodir, onedir):
# Load images
zero_images = load_images_from_folder(zerodir)
one_images = load_images_from_folder(onedir)
# Get feature vectors of images
zero_feature_vectors = get_all_image_feature_vectors(zero_images, 0)
one_feature_vectors = get_all_image_feature_vectors(one_images, 1)
# Input feature vectors into a CSV file
with open(filename, "w", encoding="UTF-8") as f:
writer = csv.writer(f)
writer.writerows(zero_feature_vectors)
writer.writerows(one_feature_vectors)
分别从两个类别的目录加载图像,提取特征向量,然后将所有特征向量写入CSV文件。最后生成一个包含所有图像特征向量的CSV文件。
代码获取
关注VX公众号 :Python算法小当家 ;后台回复关键词:图像特征提取