古詩詞大全網 - 成語故事 - 像處理中怎麽減少前後幀光照不壹樣帶來的影響

像處理中怎麽減少前後幀光照不壹樣帶來的影響

步驟

1.進行最大(最小)值濾波初步得到光照圖

2.進行均值(或高斯)濾波得到最終的光照分布圖

3.原始圖像減去光照圖,得到前景目標

壹個栗子

拿matlab中自帶的rice.png圖舉例。我們希望能夠把大米和背景區分開來,直觀的做法是用閾值分割來做成二值圖,再對聯通區域進行標記,這樣就能知道每個大米的大小和中心位置。

可是仔細觀察大米圖會發現攝像時光照不均勻,這樣就很難用壹個全局閾值去進行分割,如果直接分割的話會導致壹部分背景被識別為目標(閾值偏小)或者丟失部分目標(閾值偏大)。如果把光照的不均勻去掉,再做二值化的結果如何呢?

代碼

function newIm= DUCO_RemoveBackGround(im,w,isShow)

%im:原始圖像;w 濾波窗體大小;isShow 是否顯示中間過程

%

%

if isShow==1

figure

imshow(im,[])

end

bk=double(im);

%1.最小值濾波

bk=ordfilt2(bk,1,ones(w,w),'symmetric');

if isShow==1

figure

subplot(2,2,1)

imshow(bk,[]),title('最小值濾波之後的結果'); %顯示濾波後的圖象

end

%2.均值濾波

h=ones(w,w)/(w*w);

bk=imfilter(bk,h,'replicate');

if isShow==1

subplot(2,2,2)

imshow(bk,[]),title('均值濾波之後的結果'); %顯示濾波後的圖象

end

%3.減掉亮度不均的結果

newIm=imsubtract(double(im),bk);

if isShow==1

subplot(2,2,3)

imshow(newIm,[]);title('去背景圖');

end

%4.二值化分割出目標

th=graythresh(newIm/255);

newIm=im2bw(newIm/255,th);

if isShow==1

subplot(2,2,4)

imshow(newIm),title('二值化的結果'); %顯示濾波後的圖象

end

end