%---------------阴影消除------------------------------
%---------------Shadow Removal------------------------
网址:
http://webeng.cs.ait.ac.th/cvwiki/matlab:tutorial:shadowremoval
%----------------------监控系统的阴影消除方法-------------------
本工作采用的实验样本为http://gps-tsc.upc.es/imatge/_jl/Tracking/challenge.avi。
该视频由论文“Shadow Removal with Blob-Based Morphological Reconstruction for Error Correction"的作者提供。
我们可以按照以下步骤消除图像中的阴影:
%--------------------Step 1: Frame Extraction---------------
mov = aviread(movieFile, frameNo);%从视频movieFile读取第frameNo帧视频
[Img, Map] = frame2im(mov);%将视频帧mov转换成图像Img。Map是颜色映射图。
Img = imread(ImgFile);%ImgFile为图像保存地址。imread从ImgFile处读取图像Img。
%--------------------Step 2: Video Stream---------------------
fileinfo = aviinfo(movieFile);%读取视频movieFile的信息。movieFile是视频的保存地址。
fileinfo = aviinfo('challenge.avi');%读取视频challenge.avi的信息。
%读取视频帧并显示图像
for frame = 1 : fileinfo.NumFrames
mov = aviread(movieFile, frame);
[curFrame, Map] = frame2im(mov(1));
Imshow(curFrame);
end
%--------------------Step 3: Preprocessing--------------
%将第460帧作为背景模型
mov = aviread(movieFile, 460);%读取第460帧
[T, Map] = frame2im(mov);%将视频帧转换成图像
X = im2double(T);%将图像转换为实数矩阵。其目的是为了能够实现精确的计算。
%规范化RGB图像
misc = (X(:, :, 1) + X(:, :, 2) + X(:, :, 3));
misc(misc == 0) = 0.0001;%防止规范化表达式的分母为零(overcome "divide by zero error"
X(:, :, 1) = X(:, :, 1) ./ misc;%规范化R空间至[0.0001, 1]。
X(:, :, 2) = X(:, :, 2) ./ misc;%规范化G空间至[0.0001, 1]。
%规范化后的r,g,b空间是相关的,即r + g + b = 1。因此,我们只需要获得r, g的信息即可。
%-------------------Step 4: Shadow Removal----------------------
%重复Step3将当前的RGB空间的图像规范到rg空间。
A = imabsdiff(X, X1);%提取前景像素A。X和X1都是规范化后的图像矩阵。值域为[0.0001, 1]。
A(A < 0.31) = 0;%将差值小于0.31的像素视为阴影。
A(A >= 0.31) = 1;
%阴影消除后的图像,虽然没有了阴影,但是存在离散和空洞现象。数学形态学膨胀操作可以用来重建该图像。
Res = imdilate(A, ones(9));
%阴影消除的阈值和数学形态学模板的大小需要根据具体的视频图像调整到合适的值。
%-----------------Step 5: Foreground Classification---------------
GX = rgb2gray(T);%将背景图像T转化为灰度图像GX。
GX1 = rgb2gray(curFrame);%将当前图像转化为灰度图像GX1。
FD = im2double(imabsdiff(GX, GX1));%将背景差图像转化为实数矩阵。
FD(FD < 0.1) = 0;
FD(FD >= 0.1) = 1;%阴影阈值取为0.1。
DR = imdilate(FD, ones(3));%数学形态学膨胀操作
re = imfill(DR, 'holes');%填充空洞
%阴影阈值和数学形态学膨胀模板的大小需要根据具体视频情况调整到合适的值。
%--------------Reconstruction and Object Classification-----------
%---------------重建和目标分类------------------------------------
%将阴影消除图Res和小阈值前景检测图re相乘来获得最终的前景目标检测图
finalRes(:, :, 1) = Res(:, :, 1) .* re;
finalRes(:, :, 2) = Res(:, :, 2) .* re;
finalRes(:, :, 3) = Res(:, :, 3) .* re;
%获取前景目标检测图的轮廓
boundaries = bwboundaries(finalRes);
bndrSize = size(boundaries);
imshow(curFrame);%显示当前图像
hold on;%将在当前图像中加上目标框
%给前景检测图中长度和宽度都大于20像素的区域加上方框
for k = 1 : bndrSize(1)
bnd = boundaries{k};
RB2 = max(bnd);
LT2 = min(bnd);
if (max(RB2 - LT2) > 20)
rectangle('Position', [LT(2), LT2(1), RB2(2) - LT2(2), RB2(1) - LT2(1)], 'EdgeColor', 'g', 'LineWidth', 1);
end
end
for i = 700 : 1000
i
cur = aviread(movieFile, i);
cur = frame2im(cur);
imshow(cur);
pause;
end
test1=test;
test1 (test1>=0.2) = 1;
test1 (test1<0.2) = 0;
imshow(test1)
阴影消除的代码_监控系统阴影消除_matlab
版权申诉
106 浏览量
2022-04-05
22:18:29
上传
评论
收藏 4KB RAR 举报
![avatar](https://profile-avatar.csdnimg.cn/2588731bac124b388c4a87fce0b1493c_m0_53407570.jpg!1)
![avatar-vip](https://csdnimg.cn/release/downloadcmsfe/public/img/user-vip.1c89f3c5.png)
阿里matlab建模师
- 粉丝: 3381
- 资源: 2786
最新资源
- FM1702SL芯片13.56MHZ NFC读卡器开发板PROTELPCB图+FM1702SL中文说明书+FM1715编程指南
- 期末大作业交通数据分析与应用期末作业程序源码+实验报告.zip
- 期末大作业基于Java web的图书销售管理系统(源码+数据库)高分项目
- python-leetcode面试题解之第274题H指数.zip
- python-leetcode面试题解之第270题最接近二叉搜索树值.zip
- python-leetcode面试题解之第267题回文排列II.zip
- python-leetcode面试题解之第264题丑数II.zip
- python-leetcode面试题解之第263题丑数.zip
- python-leetcode面试题解之第258题各位相加.zip
- python-leetcode面试题解之第257题二叉树的所有路径.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)