Bootstrap

10种超强图像特征提取算法Python代码实现

声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类算法的家人,可关注我的VX公众号:python算法小当家,不定期会有很多免费代码分享~

图像特征提取是计算机视觉和图像处理的关键步骤,因为计算机不认识图像,只理解数字。通过特征提取,计算机便可以理解图像含义,实现真正意义上的“视觉智能”。

**图像特征提取的目的是从中提取有用信息,以便后续的分析和应用。**通过图像特征提取,可以实现数据降维、提高模型性能、简化计算、适用不同的应用场景等需求。

本期小当家带来12种超强的图像特征提取算法,不管是实际应用还是作为论文创新都是非常适用的!!!

代码获取请见文末

10种图像识别算法介绍

算法功能用途
BIC用于图像的边界和内部区域分类,通过对图像进行像素分类来提取特征。常用于图像分类和图像检索任务。
FOM评估图像分割算法性能的指标,通过比较分割结果和理想分割之间的差异来计算。图像分割质量评估。
Gabor_total扩展的Gabor特征提取方法,可能包含不同尺度和方向的Gabor滤波器组合。更全面的纹理分析和目标检测。
Gray灰度共生矩阵(GLCM)特征提取,通过分析图像灰度级的空间关系来提取纹理特征。纹理分类、图像检索。
Haralick基于Haralick特征(从GLCM中提取),包括对比度、相关性、能量和同质性等。纹理分析、医学图像处理。
HuHu矩特征,通过计算图像的七个不变矩来提取形状特征。形状匹配、目标识别。
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算法小当家 ;后台回复关键词:图像特征提取

;