您现在的位置:首页 >> 机器学习 >> 内容

m基于图像灰度共生矩阵纹理提取和GRNN神经网络的人口密度检测算法matlab仿真

时间:2023/2/27 22:57:39 点击:

  核心提示:10_036_m,包括程序操作录像+说明文档+参考文献...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/ZJWbkpdq

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览


3.算法概述

         灰度共生矩阵,指的是一种通过研究灰度的空间相关特性来描述纹理的常用方法。1973年Haralick等人提出了用灰度共生矩阵来描述纹理特征。由于纹理是由灰度分布在空间位置上反复出现而形成的,因而在图像空间中相隔某距离的两像素之间会存在一定的灰度关系,即图像中灰度的空间相关特性。通常计算灰度共生矩阵的方向取0° ,45°,90° , 135°四个方向。若是不对这四个方向综合,则在每一方向上都可以得到多类特征,这样得到纹理特征过于繁多,不利于使用。因而又可以对这四个方向的特征值取平均值,通过比较本文取了四个方向的平均值作为最终的特征值共生矩阵。

       纹理特征影像生成的主要思想是:用每一个小窗口形成的子影像,通过纹理特征计算程序计算小窗口影像灰度共生矩阵和纹理特征值,然后将代表这个窗口纹理特征值赋值给窗口的中心点,这就完成了第一小窗口的纹理特征计算。然后窗口被移动一个像素形成另外一个小的窗口影像,再重复计算新共生矩阵和纹理特征值。依次类推,这样整个图象就会形成一个由纹理特征值做成的一个纹理特征值矩阵,然后将这个纹理特征值矩阵转换成纹理特征影像。

4.部分源码

..........................................................

indxx               = 0; 

for tt = frameNum_Originals

    disp('当前帧数');

    tt

    indxx            = indxx + 1; 

    pixel_original   = read(Obj,tt);

    pixel_original2  = imresize(pixel_original,[RR,CC]);

    Temp = zeros(RR,CC,CRGB,'uint8');

    Temp = pixel_original2;

    Temp = reshape(Temp,size(Temp,1)*size(Temp,2),size(Temp,3));  

    image = Temp;

    for kk = 1:K   

        Datac         = double(Temp)-reshape(Mus(:,kk,:),D,CRGB);

        Squared(:,kk) = sum((Datac.^ 2)./reshape(Sigmas(:,kk,:),D,CRGB),2); 

    end

    [junk,index] = min(Squared,[],2); 

    Gaussian                                                = zeros(size(Squared));

    Gaussian(sub2ind(size(Squared),1:length(index),index')) = ones(D,1);

    Gaussian                                                = Gaussian&(Squared<Deviation_sq);

    %参数更新

    Weights = (1-Alpha).*Weights+Alpha.*Gaussian;

    for kk = 1:K

        pixel_matched   = repmat(Gaussian(:,kk),1,CRGB);

        pixel_unmatched = abs(pixel_matched-1);

        Mu_kk           = reshape(Mus(:,kk,:),D,CRGB);

        Sigma_kk        = reshape(Sigmas(:,kk,:),D,CRGB);

        Mus(:,kk,:)     = pixel_unmatched.*Mu_kk+pixel_matched.*(((1-Rho).*Mu_kk)+(Rho.*double(image)));

        Mu_kk           = reshape(Mus(:,kk,:),D,CRGB); 

        Sigmas(:,kk,:)  = pixel_unmatched.*Sigma_kk+pixel_matched.*(((1-Rho).*Sigma_kk)+repmat((Rho.* sum((double(image)-Mu_kk).^2,2)),1,CRGB));       

    end

    replaced_gaussian   = zeros(D,K); 

    mismatched          = find(sum(Gaussian,2)==0);       

    for ii = 1:length(mismatched)

        [junk,index]                            = min(Weights(mismatched(ii),:)./sqrt(Sigmas(mismatched(ii),:,1)));

        replaced_gaussian(mismatched(ii),index) = 1;

        Mus(mismatched(ii),index,:)             = image(mismatched(ii),:);

        Sigmas(mismatched(ii),index,:)          = ones(1,CRGB)*Variance;

        Weights(mismatched(ii),index)           = Props;  

    end

    Weights         = Weights./repmat(sum(Weights,2),1,K);

    active_gaussian = Gaussian+replaced_gaussian;

    %背景分割 

    [junk,index]    = sort(Weights./sqrt(Sigmas(:,:,1)),2,'descend');

    bg_gauss_good   = index(:,1);

    linear_index    = (index-1)*D+repmat([1:D]',1,K);

    weights_ordered = Weights(linear_index);

    for kk = 1:K

        Weight(:,kk)= sum(weights_ordered(:,1:kk),2);

    end

    bg_gauss(:,2:K) = Weight(:,1:(K-1)) < Back_Thresh;

    bg_gauss(:,1)   = 1;           

    bg_gauss(linear_index)     = bg_gauss;

    active_background_gaussian = active_gaussian & bg_gauss;

    foreground_pixels          = abs(sum(active_background_gaussian,2)-1);

    foreground_map             = reshape(sum(foreground_pixels,2),RR,CC);

    Images1                    = foreground_map;   

    objects_map                = zeros(size(foreground_map),'int32');

    object_sizes               = [];

    Obj_pos                    = [];

    new_label                  = 1;

    %计算连通区域

.........................................................................

    background_hsv              = rgb2hsv(background);

    image_hsv                   = rgb2hsv(pixel_original2);

    for i = 1:RR

        for j = 1:CC      

            if (objects_map(i,j))&&...

               (abs(image_hsv(i,j,1)-background_hsv(i,j,1))<SHADOWS(1))&&...

               (image_hsv(i,j,2)-background_hsv(i,j,2)<SHADOWS(2))&&...

               (SHADOWS(3)<=image_hsv(i,j,3)/background_hsv(i,j,3)<=SHADOWS(4))

               Shadows(i,j) = 1;  

            else

               Shadows(i,j) = 0;  

            end               

        end    

    end

    Images0           = objects_map;

    objecs_adjust_map = Shadows;

    Images2           = objecs_adjust_map;    

.......................................................................

    if indxx > 80;

        load train_model.mat

        P     = [S2(indxx-80);F2(indxx-80)];

        y     = round(NET(P));

 

 

        if y == 1

           set(handles.text2,'String','低密度'); 

           set(handles.text2,'ForegroundColor',[0 1 0]) ;

        end

        if y == 2

           set(handles.text2,'String','中密度');  

           set(handles.text2,'ForegroundColor',[1 1 0]) ;

        end    

        if y == 3

           set(handles.text2,'String','高密度');   

           set(handles.text2,'ForegroundColor',[1 0 0]) ;

        end    

    end

........................................................................

end

10_036_m

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168