精华内容
下载资源
问答
  • 由于医学图像生成容易受到空间时间影响,...又由于模糊C均值聚类算法是可并行的,将其改进并在图形处理器上完成计算,降低了算法迭代次数和计算时间,保证了实时性.实验结果表明,使用该方法对医学图像分割得到了良好的结果.
  • 针对现有模糊聚类分割算法对噪声的鲁棒性差且提取的图像特征不充分等问题, 本文提出了一种结合形态学重建和超像素的多特征模糊 C-均值(FCM)分割算法. 首先, 利用形态学闭合重建处理原图像, 提高了算法的鲁棒性和细节...
  • 针对传统FCM算法计算量大、对噪声敏感的缺点,提出了一种融合加窗色调直方图的快速FCM算法(MHFCM)。对彩色图像的色调直方图加窗得到背景色调,对去除背景信息后的有效信息进行FCM聚类分割。实验结果表明,MHFCM...
  • FCM聚类分割算法

    2012-10-30 21:20:22
    FCM算法是一种基于划分的聚类算法,它的思想就是使得被划分到同一簇的对象之间相似度最大,而不同簇之间的相似度最小。模糊C均值算法是普通C均值算法的改进,普通C均值算法对于数据的划分是硬性的,而FCM则是一种...
  • FCM算法在图像分割中的完整代码实现!超易懂的超简洁的MATLAB代码实现,绝对好代码!
  • 详细描述了FCM聚类算法的基本原理,并简要阐述了FCM用于图像分割的基本过程,最后给出FCM图像分割的结果。
  • 基于层次聚类与峰值检测的FCM图像分割算法.pdf
  • 针对传统的模糊C均值(FCM)算法在图像分割方面存在的缺点,提出一种基于空间信息及隶属度约束的FCM图像分割算法.该算法在传统FCM算法的目标函数中引入图像空间信息及对隶属度的约束,使得到的聚类中心更加合理,并且增强...
  • 提出一种基于空间邻域信息的FCM图像分割算法,该方法将目标函数中的距离定义为特征距离与空间距离之和,不仅反映特征距离,而且反映空间距离。将空19信息引入到传统FCM算法的目标函数中,建立了包含邻域信息的新的...
  • FCM聚类,实现图像分割,有图片,matlab程序,自己运行过,可以实现。可下载学习。 FCM聚类,实现图像分割,有图片,matlab程序,自己运行过,可以实现。可下载学习。
  • Szilagyi等人提出的EnFCM算法加快了灰度图像的聚类过程。通过对像素点及其8邻域像素的线性加权求和预处理原图像,形成了从原始图像到其局部的邻域像素的平均图像。由于像素的灰度级值一般是8位分辨率(256级灰度),...
  • array) new_image = label.reshape(rows, cols) cv2.imshow("result", new_image) cv2.imwrite("fcm_result.jpg",new_image) cv2.waitKey(0) cv2.destroyAllWindows() 适用于小图像分割,大图像速度非常慢

    import cv2

    import numpy as np

    C = 2

    M = 2

    EPSILON = 0.001

    def get_init_fuzzy_mat(pixel_count):

    global C

    fuzzy_mat = np.zeros((C, pixel_count))

    for col in range(pixel_count):

    temp_sum = 0

    randoms = np.random.rand(C - 1, 1)

    for row in range(C - 1):

    fuzzy_mat[row, col] = randoms[row, 0] * (1 - temp_sum)

    temp_sum += fuzzy_mat[row, col]

    fuzzy_mat[-1, col] = 1 - temp_sum

    return fuzzy_mat

    def get_centroids(data_array, fuzzy_mat):

    global M

    class_num, pixel_count = fuzzy_mat.shape[:2]

    centroids = np.zeros((class_num, 1))

    for i in range(class_num):

    fenzi = 0.

    fenmu = 0.

    for pixel in range(pixel_count):

    fenzi += np.power(fuzzy_mat[i, pixel], M) * data_array[0, pixel]

    fenmu += np.power(fuzzy_mat[i, pixel], M)

    centroids[i,0] = fenzi / fenmu

    return centroids

    def eculidDistance(vectA, vectB):

    return np.sqrt(np.sum(np.power(vectA - vectB, 2)))

    def eculid_distance(pixel_1, pixel_2):

    return np.power(pixel_1-pixel_2, 2)

    def cal_fcm_function(fuzzy_mat, centroids, data_array):

    global M

    class_num, pixel_count = fuzzy_mat.shape[:2]

    target_value = 0.0

    for c in range(class_num):

    for p in range(pixel_count):

    target_value += eculid_distance(data_array[0,p], centroids[c,0])*np.power(fuzzy_mat[c,p], M)

    return target_value

    def get_label(fuzzy_mat, data_array):

    pixel_count = data_array.shape[1]

    label = np.zeros((1,pixel_count))

    for i in range(pixel_count):

    if fuzzy_mat[0,i] > fuzzy_mat[1,i]:

    label[0,i] = 0

    else:

    label[0,i] = 255

    return label

    def cal_fuzzy_mat(data_array, centroids):

    global M

    pixel_count = data_array.shape[1]

    class_num = centroids.shape[0]

    new_fuzzy_mat = np.zeros((class_num, pixel_count))

    for p in range(pixel_count):

    for c in range(class_num):

    temp_sum = 0.

    Dik = eculid_distance(data_array[0,p], centroids[c,0])

    for i in range(class_num):

    temp_sum += np.power(Dik/(eculid_distance(data_array[0,p], centroids[i,0])), (1/(M-1)))

    new_fuzzy_mat[c,p] = 1/temp_sum

    return new_fuzzy_mat

    def fcm(init_fuzzy_mat, init_centroids, data_array):

    global EPSILON

    last_target_function = cal_fcm_function(init_fuzzy_mat, init_centroids, data_array)

    print("迭代次数 = 1, 目标函数值 = {}".format(last_target_function))

    fuzzy_mat = cal_fuzzy_mat(data_array, init_centroids)

    centroids = get_centroids(data_array, fuzzy_mat)

    target_function = cal_fcm_function(fuzzy_mat, centroids, data_array)

    print("迭代次数 = 2, 目标函数值 = {}".format(target_function))

    count = 3

    while count < 100:

    if abs(target_function-last_target_function) <= EPSILON:

    break

    else:

    last_target_function = target_function

    fuzzy_mat = cal_fuzzy_mat(data_array, centroids)

    centroids = get_centroids(data_array, fuzzy_mat)

    target_function = cal_fcm_function(fuzzy_mat, centroids, data_array)

    print("迭代次数 = {}, 目标函数值 = {}".format(count, target_function))

    count += 1

    return fuzzy_mat, centroids, target_function

    image = cv2.imread(r"C:\Users\Desktop\test.jpg", cv2.IMREAD_GRAYSCALE)

    rows, cols = image.shape[:2]

    pixel_count = rows * cols

    image_array = image.reshape(1, pixel_count)

    # print(image_array[1])

    # 初始模糊矩阵

    init_fuzzy_mat = get_init_fuzzy_mat(pixel_count)

    # 初始聚类中心

    init_centroids = get_centroids(image_array, init_fuzzy_mat)

    fuzzy_mat, centroids, target_function = fcm(init_fuzzy_mat, init_centroids, image_array)

    label = get_label(fuzzy_mat, image_array)

    new_image = label.reshape(rows, cols)

    cv2.imshow("result", new_image)

    cv2.imwrite("fcm_result.jpg",new_image)

    cv2.waitKey(0)

    cv2.destroyAllWindows()

    适用于小图像分割,大图像速度非常慢

    展开全文
  • 改进的基于MMTD的FCM医学图像分割算法
  • 结合边缘局部信息的FCM抗噪图像分割算法
  • 基于MMTD的改进FCM医学图像分割算法
  • 多分辨率图像锥的FCM聚类图像分割算法.pdf
  • 基于改进的FCM聚类算法的图像分割.pdf
  • 使用FCM聚类算法进行图像分割

    千次阅读 2020-06-16 22:07:37
    FCM进行图像分割的评价指数使用FCM聚类算法进行图像分割Bezdek划分系数Xie_Beni系数重构错误率V_RE如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、...

    使用FCM聚类算法进行图像分割

    使用无监督算法进行图像分割,往往这类图像没有真实值,没办法用有监督的指标进行评价;这里介绍三种内部评价指标:Bezdek划分系数、Xie_Beni系数、重构错误率V_RE和PBM指标

    Bezdek划分系数

    V P C V_{PC} VPCBezdek划分系数,它主要目的是重新刻画分割后的像素的隶属度,定义如下:
    V P C = 1 n ∑ i = 1 c ∑ j = 1 n u i j 2 V_{P C}=\frac{1}{n}\sum_{i=1}^{c} \sum_{j=1}^{n} u_{i j}^{2} VPC=n1i=1cj=1nuij2

    即所有元素隶属于各个分类隶属度的平方和,对图像进行分割时,性能较优的聚类算法是使图像中
    像素归属于某一类的隶属度尽可能地大,反之属于其他聚类的隶属度尽可能的小, V P C V_{PC} VPC 的值越大,表明聚类的效果越好1

    Xie_Beni系数

    V X B V_{XB} VXBXie-Beni系数,其定义为:
    V X B = ∑ i = 1 c ∑ j = 1 n u i j 2 ∥ x j − v i ∥ 2 n ( min ⁡ j ≠ k ∥ v j − v k ∥ 2 ) V_{\mathrm{XB}}=\frac{\sum_{i=1}^{c} \sum_{j=1}^{n} u_{i j}^{2}\left\|x_{j}-v_{i}\right\|^{2}}{n\left(\min _{j \neq k}\left\|v_{j}-v_{k}\right\|^{2}\right)} VXB=n(minj=kvjvk2)i=1cj=1nuij2xjvi2

    该系数反映了图像聚类内部的一种距离度量,在进行图像分割时,期望聚类内部的像素更加紧密, V X B V_{XB} VXB 越小,则说明聚类的效果越好

    重构错误率V_RE

    V R E V_{RE} VRE是图像的重构错误率,其定义如下:

    V R E = 1 n ∑ i = 1 n ∥ I ′ ( i ) − I ( i ) ∥ 2 V_{RE}=\frac{1}{n} \sum_{i=1}^{n}\left\|I^{\prime}(i)-I(i)\right\|^{2} VRE=n1i=1nI(i)I(i)2

    它是分析分割后的重构图像与初始图像间的差距, I ′ ( i ) I^{\prime}(i) I(i)为重构图像的第 i i i个像素的灰度值,定义为:
    I ′ ( i ) = ∑ k = 1 c u k i 2 I ( i ) ∑ k = 1 c u k i 2 I^{\prime}(i)=\frac{\sum_{k=1}^{c} u_{k i}^{2} I(i)}{\sum_{k=1}^{c} u_{k i}^{2}} I(i)=k=1cuki2k=1cuki2I(i)

    对图像进行分割后,新的隶属度和聚类中心对图像进行重构,重构后的图像应与原图像尽可能的相似,即表明 V R E V_{RE} VRE的值越小,算法的分割效果越好

    PBM指标

    PBM指标是一种聚类有效性指标,定义如下:
    P B M = ( 1 K × E 1 E K × D K ) 2 P B M =\left(\frac{1}{K} \times \frac{E_{1}}{E_{K}} \times D_{K}\right)^{2} PBM=(K1×EKE1×DK)2

    P B M PBM PBM由三部分组成,分别是 1 / K 1 / K 1/K E 1 / E k E_{1} / E_{k} E1/Ek D K D_{K} DK。第一项中 K K K是提前给定的图像分割类别数,第二项中 E 1 E_{1} E1对于一个给定的数据集,为一个常值。而 E k E_{k} Ek是待分类数据与个体中聚类中心的模糊距离之和, P B M PBM PBM值会随着 E k E_{k} Ek的减小而增大。第三项中 D K D_{K} DK是个体中的所有聚类中心对之间的最大距离。 P B M PBM PBM指标达到最大值,取得最优划分

    代码2

    
    function [Bezdek_V, Xie_Beni_V, V_RE, V_PBM] = Evaluation_index(I, U, V)
    
    % Evaluation_index为聚类分割评价指数
    % 输入: 原始待聚类数据I, 隶属度矩阵U, 聚类中心V 
    % 输出: Bezdek划分系数, Xie_Beni系数, 重构错误率V_RE,V_PBM
    
    %%
    % 原始待聚类数据I,n代表样本数目,d代表每个样本的维数
    [n,d] = size(I);
    
    % 隶属度矩阵U,c代表聚类类别数目,n代表样本数目
    [c,n] = size(U);
    
    % 聚类中心V,c为聚类中心的数目,d代表每个样本的维数
    [c,d] = size(V);
    
    %% Bezdek划分系数
    % 所有元素隶属于各个分类隶属度的平方和
    Bezdek_V = sum(sum(U.^2)) / n ;
    
    %% Xie_Beni系数、重构错误率V_RE
    % Xie_Beni系数
    Xie_Beni_V = 0;
    
    % 初始化重构图像像素值
    I_RE = zeros(n,d);
    
    % XB指数分母项,最近类间距离
    % 初始化最近的类间距离的平方为 前两个聚类中心的距离平方
    % 欧氏距离:向量按元素求幂,再求和
    min_V = sum((V(1,:)-V(2,:)).^2);
    
    for i = 1:c
        for j = 1:c
            if(i-j ~= 0 && sum((V(i,:)-V(j,:)).^2) < min_V)
                % 排除自己和自己之间的距离0之后,遇到更小的类间距离 即 更新初始类间距离
                min_V = sum((V(i,:)-V(j,:)).^2);
            end
        end
    end
    
    %%
    % 遍历样本
    for i = 1:n
        
        % temp表示重构图像像素值的分子,temp1表示其分母
        temp = 0;
        temp1 = 0; 
        
        % 遍历类别
        for j = 1:c
            
            % XB指数的分子
            Xie_Beni_V = Xie_Beni_V + U(j,i)^2 * sum((I(i,:)- V(j,:)).^2);
            
            % 重构图像像素值的分子和分母
            temp = temp + U(j,i)^2*I(i,:);
            temp1 = temp1 + U(j,i)^2;
        end
        
        % 重构图像像素值
        I_RE(i,:) = temp / temp1;
    end
    
    % 最终的XB指数等于分子除以分母,n为样本数目,min_V为最小类间距离
    Xie_Beni_V = Xie_Beni_V / (n * min_V);
    
    % 重构错误率V_RE
    V_RE = sum(sum((I_RE - I).^2)) / n;
    
    %% PBM指标
    
    % 计算最大类间距离
    max_V = sqrt(sum((V(1,:)-V(2,:)).^2));
    
    for i = 1:c
        for j = 1:c
            if(i-j ~= 0 && sqrt(sum((V(i,:)-V(j,:)).^2)) > max_V)
                % 排除自己和自己之间的距离0之后,遇到更大的类间距离 即 更新初始类间距离
                max_V = sqrt(sum((V(i,:)-V(j,:)).^2));
            end
        end
    end
    
    % 初始化Ek
    Ek = 0;
    
    for i = 1:n
        for j = 1:c
            Ek = Ek + U(j,i) * sqrt(sum((I(i,:)- V(j,:)).^2));  
        end 
    end
    
    % 初始化E1
    E1 = 0;
    for i = 1:n
        E1 = E1 + U(1,i) * sqrt(sum((I(i,:)- V(1,:)).^2));
    end
    
    % V_PBM
    V_PBM = (E1 * max_V / (c * Ek))^2;
    
    end
    
    
    
    
    

    参考资料


    1. 王民, 李媛, 张立材. 基于纹理特征的盲道区域分割算法[J]. 信息通信, 2017(7). ↩︎

    2. FCM算法中评价指数matlab程序. ↩︎

    展开全文
  • 基于改进抑制式FCM聚类算法的图像分割.pdf
  • 一种用于图像分割的改进FCM聚类算法.pdf
  • 基于FCM聚类算法的人脑MRI图像分割.pdf
  • 结合 PSO算法和加权 FCM算法( WFCM)的优势,提出一种新的图像分割算法―――基于 PSO和加权 FCM的图像分割算法( PWF) 。算法通过 PSO进行全局寻优,克服了单纯 FCM算法的对初始值敏感及对噪声数 据敏感,容易陷入局部...
  • 基于改进FCM聚类算法的维吾尔文字图像分割.pdf
  • FCM算法图像分割MATLAB代码
  • 一种基于改进FCM的自动图像分割算法
  • 基于FCM聚类算法的快速水平集图像分割仿真.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 767
精华内容 306
关键字:

fcm分割算法