Matlab 密度图标定与生成

参考自:如何生成人群密度图

1、标定图片

在路径下F:\m_and_c_aboutCounting\airport_tianjin_article\存放要标定的图片,图片命名规范如下:



原本的代码在标定的时候有一些不方便的地方,比如画错了不能撤销,不实时显示光标,这里进行了改良。

%对图片上某个点进行标注
clear all
close all
clc
set(gcf,'color','white')%图片的背景设置为白色
src='';
for i=1:2   %根据图片张数进行修改
    num = i;
    str = '.jpg' ;
    Mstr='.mat';
    filestr='F:\m_and_c_aboutCounting\airport_tianjin_article\';
    refilestr='F:\m_and_c_aboutCounting\airport_tianjin_article\';
    left_par='air(';
    Mark='mark';
    right_par=')';
    STR = sprintf('%s%s%d%s%s', filestr,left_par,num ,right_par, str) ;
    RSTR=sprintf('%s%s%d%s%s', refilestr,left_par,num ,right_par, str) ;
    MSTR=sprintf('%s%s%d%s%s', refilestr,left_par,num ,right_par, Mstr) ;
    MarkSTR=sprintf('%s%d%s', refilestr,Mark,num , Mstr) ;
    pic_source=imread(STR); 
    pic=imresize(pic_source,[602,800]);%调整图像的大小,
    imwrite(pic,RSTR);%实际修改本地的图片
    showpic=imshow(pic);

    gt_point = [0,0];%用于存储标记点
    while(1)
        [x1,y1]=ginput(1);
        Atemp=[x1,y1];
        gt_point = [gt_point;Atemp];
        hold on
        plot(x1,y1,'r+');
        
        % Q键逐步撤销之前标注的点
        if strcmpi(get(gcf,'CurrentCharacter'),'q')
            if size(gt_point,1)>0
                gt_point(size(gt_point,1),:)=[];%非回车会以鼠标当前点做一次存储,这是多余的,删除
            end
            %重新做图
            close all
            showpic=imshow(pic);
            if size(gt_point,1) >0
                gt_point(size(gt_point,1),:)=[];
                for j = 1:size(gt_point,1)
                    hold on
                    plot(gt_point(j,1),gt_point(j,2),'r+');
                end
            end
        end  
        
        %回车键结束本次图片标定
        if strcmpi(get(gcf,'CurrentCharacter'),char(13))
            break;
        end
        
    end
    gt_point(1,:)=[];%删除第一行多余的0行    
    save(MSTR,'gt_point');   
    close all
end

按回车结束当前图片标定

标定完成后,会在当前目录下生成.mat文件,存储标定点的坐标(x,y),用NX2的矩阵表示,N为标定的点数。其中按Q键可以撤销之前标注错误的点。

2、生成密度图

clear;
m=602;n=800;
%m=m/4;
%n=n/4;
GTStr='F:\m_and_c_aboutCounting\airport_tianjin_article\air(';
GTMAT=').mat';
IMGStr='F:\m_and_c_aboutCounting\airport_tianjin_article\air(';
IMG=').jpg';
%shanghaih5str='shanghai\train_data\train_data.h5';
%h5create(shanghaih5str,'/label',[259 192 1 2],'Datatype','double'); 
for num=2:2
    gtSTR =sprintf('%s%d%s', GTStr,num , GTMAT ) ;
    imgSTR=sprintf('%s%d%s', IMGStr,num , IMG ) ;
    load(gtSTR);
    img=imread(imgSTR);
    %Reimg=imresize(img,0.25);
    gt=gt_point;
    %gt=F;
    %gt=gt/4;
    d_map = zeros(m,n);

    for j=1:size(gt,1)
        if(gt(j,2)>0&&gt(j,2)<235)%表示离镜头比较远
            ksize=30;
        end
        if(gt(j,2)>=235&&gt(j,2)<260)
            ksize=40;
        end
         if(gt(j,2)>=260&&gt(j,2)<360)
            ksize=40;
         end
        if(gt(j,2)>=360&&gt(j,2)<=602)
            ksize=40;
        end

        radius =ceil(ksize/2);
        sigma = ksize/2.5; 
        h = fspecial('gaussian',[ksize],sigma);


        x_ = max(1,floor(gt(j,1)));  
        y_ = max(1,floor(gt(j,2)));  
  %在索引区的素有列按照从右往左的顺序依次加到矩阵
       if (x_-radius+1<1)  
              for ra = 0:radius-x_-1  
                   h(:,end-ra) = h(:,end-ra)+h(:,1);  
                   h(:,1)=[];  
              end  
       end  
       if (y_-radius+1<1)  
           for ra = 0:radius-y_-1  
               h(end-ra,:) = h(end-ra,:)+h(1,:);  
               h(1,:)=[];  
           end  
       end  


       if (x_+ksize-radius>n)  
           for ra = 0:x_+ksize-radius-n-1  
               h (:,1+ra) = h(:,1+ra)+h(:,end);  
               h(:,end) = [];  
           end  
       end  
       if(y_+ksize-radius>m)  
            for ra = 0:y_+ksize-radius-m-1  
                h (1+ra,:) = h(1+ra,:)+h(end,:);  
                h(end,:) = [];  
            end  
       end  
          d_map(max(y_-radius+1,1):min(y_+ksize-radius,m),max(x_-radius+1,1):min(x_+ksize-radius,n))...  
             = d_map(max(y_-radius+1,1):min(y_+ksize-radius,m),max(x_-radius+1,1):min(x_+ksize-radius,n))...  
              + h; 
    end 
    vi_map=imagesc(d_map);
 %   figure; 
    VIstr=num2str(num,'F:\m_and_c_aboutCounting\airport_tianjin_R\density_map\(%d).jpg');
    %imwrite(vi_map,VIstr);  
    saveas(gcf,'F:\m_and_c_aboutCounting\airport_tianjin_R\density_map\1.jpg');   
end

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,185评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,652评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,524评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,339评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,387评论 6 391
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,287评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,130评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,985评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,420评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,617评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,779评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,477评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,088评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,716评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,857评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,876评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,700评论 2 354

推荐阅读更多精彩内容