An adaptive thresholding algorithm that seperates the foreground from the background with nonuniform illumination.
Code:
for i=1:1:100 %(number of image)
file_name=strcat('',int2str(i),'.jpg');
im1=imread(file_name);
image=adaptivethreshold(im1,5,0.4,1); %additional adaptive threshold
SE = strel('square', 15);
biner_dilate=imdilate(image,SE); %pixel dilatation
biner_filter= bwareaopen(biner_dilate,150);
SE = strel('square', 20);
biner_dilate_2=imdilate(biner_filter,SE); %pixel dilatation
region=regionprops(biner_dilate_2); %regionprops
koordinat_x=region(1,1).BoundingBox(1,1);
koordinat_y=region(1,1).BoundingBox(1,2);
width_x=region(1,1).BoundingBox(1,3);
width_y=region(1,1).BoundingBox(1,4);
center_x=region(1,1).Centroid(1,1);
center_y=region(1,1).Centroid(1,2);
figure(1)
frame_count=strcat('frame ke :',int2str(i));
subplot(2,2,1); imshow(im1); title(frame_count);
subplot(2,2,2); imshow(image); title('adaptive threshold');
subplot(2,2,3); imshow(biner_dilate_2); title('test dilate 2');
subplot(2,2,4); imshow(biner_filter); title('filter');
subplot(2,2,1),rectangle('Position',[koordinat_x,koordinat_y,width_x,width_y], 'Edge', 'g', 'LineWidth',2);
hold on
subplot(2,2,1),plot(center_x,center_y,'g+');
hold off
end
Thresholding is used to segment an image by setting all pixels whose intensity values are above a threshold to a foreground value and all the remaining pixels to a background value.
Whereas the conventional operator uses a global threshold for all pixels, adaptive thresholding changes the threshold dynamically over the image. This more sophisticated version of thresholding can accommodate changing lighting conditions in the image, e.g. those occurring as a result of a strong illumination gradient or shadows.
Code:
for i=1:1:100 %(number of image)
file_name=strcat('',int2str(i),'.jpg');
im1=imread(file_name);
image=adaptivethreshold(im1,5,0.4,1); %additional adaptive threshold
SE = strel('square', 15);
biner_dilate=imdilate(image,SE); %pixel dilatation
biner_filter= bwareaopen(biner_dilate,150);
SE = strel('square', 20);
biner_dilate_2=imdilate(biner_filter,SE); %pixel dilatation
region=regionprops(biner_dilate_2); %regionprops
koordinat_x=region(1,1).BoundingBox(1,1);
koordinat_y=region(1,1).BoundingBox(1,2);
width_x=region(1,1).BoundingBox(1,3);
width_y=region(1,1).BoundingBox(1,4);
center_x=region(1,1).Centroid(1,1);
center_y=region(1,1).Centroid(1,2);
figure(1)
frame_count=strcat('frame ke :',int2str(i));
subplot(2,2,1); imshow(im1); title(frame_count);
subplot(2,2,2); imshow(image); title('adaptive threshold');
subplot(2,2,3); imshow(biner_dilate_2); title('test dilate 2');
subplot(2,2,4); imshow(biner_filter); title('filter');
subplot(2,2,1),rectangle('Position',[koordinat_x,koordinat_y,width_x,width_y], 'Edge', 'g', 'LineWidth',2);
hold on
subplot(2,2,1),plot(center_x,center_y,'g+');
hold off
end
function bw=adaptivethreshold(IM,ws,C,tm)
%ADAPTIVETHRESHOLD An adaptive thresholding algorithm that seperates the
%foreground from the background with nonuniform illumination.
% bw=adaptivethreshold(IM,ws,C) outputs a binary image bw with the local
% threshold mean-C or median-C to the image IM.
% ws is the local window size.
% tm is 0 or 1, a switch between mean and median. tm=0 mean(default); tm=1 median.
%
% Contributed by Guanglei Xiong (xgl99@mails.tsinghua.edu.cn)
% at Tsinghua University, Beijing, China.
%
% For more information, please see
% http://homepages.inf.ed.ac.uk/rbf/HIPR2/adpthrsh.htm
if (nargin<3)
error('You must provide the image IM, the window size ws, and C.');
elseif (nargin==3)
tm=0;
elseif (tm~=0 && tm~=1)
error('tm must be 0 or 1.');
end
IM=mat2gray(IM);
if tm==0
mIM=imfilter(IM,fspecial('average',ws),'replicate');
else
mIM=medfilt2(IM,[ws ws]);
end
sIM=mIM-IM-C;
bw=im2bw(sIM,0);
bw=imcomplement(bw);
saharkiz .. i need zour help urgently on the topic of background subtraction ... i need not to lose the detected fpreground object when its not in motion another thing is that i am lost which algorithm to use as my object is no0t of uniform shape and when applying region props ..it decomposes in to small labels .. that i need to mege together
ReplyDelete