圖像處理-運動目標檢測

1.背景簡介

之前聽李永樂老師講課youtube,個人覺得講得非常好!想截圖保存講課內容,奈何李老師沒給任何機會,於是有了這個小demo!在這裏插入圖片描述

2.Matlab代碼

clc
clear
close all;
%%
%讀圖rgb2gray
img_s1 = imread('11.png');
img_s2 = imread('22.png');
if ndims(img_s1)==3
    img1 = rgb2gray(img_s1);
else
    img1 = img_s1;
end
if ndims(img_s2)==3
    img2 = rgb2gray(img_s2);
else
    img2 = img_s2;
end

%二值化提ROI-經驗值
diff  = abs(double(img1) - double(img2));
figure, imshow(diff),imcontrast,impixelinfo;
BW = imbinarize(diff,30);
%形態學處理
se1=strel('disk',3);
se2=strel('disk',15);
bw_e = imerode(BW,se1);
bw_d = imdilate(bw_e,se2);
bw_d = imdilate(bw_d,se2);
figure, imshow(bw_d);
[L,num]= bwlabel(bw_d);% 對連通區域進行標記
%初始化新圖像
dst = img_s1;
for idx = 1:num
    g1 = rgba_img(img_s1,L==idx);
    g2 = rgba_img(img_s2,L==idx);
    if g1<g2&&abs(g1-g2)>0.2
        disp(g1);
        disp(g2);
        mask = repmat(L==idx, [1,1,3]);
        dst(mask) = img_s2(mask);
    end
end
figure, imshow(dst);
imwrite(dst,'dst.png');
function gv = rgba_img(img,mask)
%統計mask區域內RGB顏色分量
rc = img(:,:,1);
gc = img(:,:,2);
bc = img(:,:,3);
green_bigger = (gc>rc).*(gc>bc);
gv = sum(double(green_bigger(mask)))/sum(sum(mask));
end

3.結果

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章