MatConvNet卷积神经网络(三)【图像滑动窗】
来源:互联网 发布:linux 发送arp广播包 编辑:程序博客网 时间:2024/06/05 06:31
利用滑动窗搜索图像中的特定内容
Matconvnet官方给出的神经网络分类器imagenet-googleNet-dag.mat已经具备了较强的识别能力,能识别1000种标签。利用它再编写一个滑动窗函数,即可实现对大图像的内容搜索(如在一棵果树上寻找果子)。
分析:
由于图像中目标对象的大小往往不同,所以采用多个不同尺寸的滑动窗口对图像进行处理。处理时,窗口由左向右,由上向下依照一定的步长逐次移动,每次移动,将框内的图像输入神经网络进行处理,然后通过得到的结果做出相应。
在本例中,若分类得到的标签号大于900(考虑到干扰,只需分类结果满足为水果),且置信度大于0.90,则记录该窗口的位置,在原图上用黑框将这个位置标出。
首先先来编写窗口尺寸不变的滑动窗函数:(MATLAB)
%slide.m
function [ out_image,n ] = slide( image, rows, cols, step,net )%窗口尺寸不变的滑动窗函数% 参数:图像变量矩阵,窗口行数,列数,步长,神经网络对象 输出为符合要求的窗口的左上角的位置和个数win = zeros(rows, cols, 3);out_image = zeros(1,2);n = 0;for i = 1:step:(size(image,1)-rows) %垂直滑动 for j = 1:step:(size(image,2)-cols) %水平滑动 win = image(i:i+rows-1,j:j+cols-1,:); %提取窗口 %imshow(win); im_ = single(win) ; % note: 0-255 range im_ = imresize(im_, net.meta.normalization.imageSize(1:2)) ; im_ = bsxfun(@minus, im_, net.meta.normalization.averageImage) ; % run the CNN net.eval({'data', im_}) ; % obtain the CNN otuput scores = net.vars(net.getVarIndex('prob')).value ; scores = squeeze(gather(scores)) ; % show the classification results [bestScore, best] = max(scores) ; if(best>940 && bestScore>0.80) %识别并判断 n=n+1; out_image(n,:)=[i,j]; %存储位置 [行数,列数] %pause; end endendend<u></u>
接下来利用上面的函数,完成多尺寸窗口,并返回带有黑框标记的图像,及黑框数量。
%var_slide.m
function [ out_image,sum ] = var_slide( image, mrows, mcols, lrows, lcols,net )%返回具有黑框标记的图像,及黑框个数% 输入参数:图像矩阵,滑动窗的最小行数,最小列数,最大行数,最大列数,神经网络out_image = image;sum = 0;winn = 1;if(winn==1) dr=0;dc=0;else dr = round((lrows-mrows)/(winn-1)); dc = round((lcols-mcols)/(winn-1));endfor i = 0:winn-1; [ locat, n ] = slide( image, mrows+dr*i, mcols+dc*i, round((mrows+dr*i)/2) ,net); sum = sum + n ; for k=1:n out_image(locat(k,1):(locat(k,1)-1+mrows+dr*i),locat(k,2),:)=0; out_image(locat(k,1):(locat(k,1)-1+mrows+dr*i),(locat(k,2)-1+mcols+dc*i),:)=0; out_image(locat(k,1),locat(k,2):(locat(k,2)-1+mcols+dc*i),:)=0; out_image((locat(k,1)-1+mrows+dr*i),locat(k,2):(locat(k,2)-1+mcols+dc*i),:)=0; endend
最后,写脚本完成最终功能
%test_slide.m
% setup MatConvNetrun matlab/vl_setupnn% load the pre-trained CNNnet = dagnn.DagNN.loadobj(load('imagenet-googlenet-dag.mat')) ;net.mode = 'test' ;a = zeros(1,1);a = input('Please input the pngs name.\n','s');a = ['photos/',a]; % load and preprocess an imageim = imread(a);addpath test;[ out_image,n ] = var_slide( im, 100, 100, 100, 100, net );figure;imshow(out_image);saveas(gcf,'myfig.jpg');
如果有什么问题,欢迎在下面留言。
1 0
- MatConvNet卷积神经网络(三)【图像滑动窗】
- MatConvNet卷积神经网络(一)
- MatConvNet卷积神经网络(二)
- 卷积神经网络(三)
- matconvnet卷积神经网络库的安装
- MatConvNet卷积神经网络(四)——用自己的数据训练
- 深度学习(三)卷积神经网络2——图像中的应用
- 机器学习:利用卷积神经网络实现图像风格迁移 (三)
- (CNN)卷积神经网络(三)
- 深度学习(三)卷积神经网络1
- 卷积神经网络(CNNs / ConvNets) 三
- 深度学习(三):初级卷积神经网络
- 卷积神经网络Step by Step(三)
- 深度学习(三):初级卷积神经网络
- 深度学习(三)---卷积神经网络
- Keras CNN卷积神经网络(三)
- 卷积神经网络(三)
- 卷积神经网络(三)
- 如何提高数据库性能
- hash_map容器
- 食物链
- Codeforces 707D Persistent Bookcase(bitset+dfs)★
- 《JAVA与模式》之策略模式
- MatConvNet卷积神经网络(三)【图像滑动窗】
- 基于Word2Vec Doc2Vec 进行文本情感分类
- ##################### Coding相关的学习网站推荐【2016/12/16更新】
- 什么是 FOUC(无样式内容闪烁)?你如何来避免 FOUC?
- LeetCode136. Single Number
- NYOJ 6 喷水装置(一)
- eclipse 招不到 javax.servlet.* 的解决方法
- Leetcode题解:55. Jump Game
- **网络设备配置文件的备份与还原**