필터 지우기
필터 지우기

Why for 2nd loop data not running for ip camera first

조회 수: 1 (최근 30일)
MOHAMMAD AZRUL AIMAN
MOHAMMAD AZRUL AIMAN 2021년 1월 12일
댓글: MOHAMMAD AZRUL AIMAN 2021년 1월 12일
Hi, i got some problem. i just write a code to compare test image and reference image. my idea is the reference image are already in the directory while the test image will be capture from ip camera. i want to loop my code 5 time, at first loop ip cam will actived and scan for green ROI. then the image will be caputure and save to directory by given name of it. so here the problem occured. when continue to loop2, the ip camera will be skip, and the code create new image based on data before not current data .
the process for 2nd loop should be like first loop. ip camera actived, scan for green ROI, save the image then running other function. So, may someone see my code and explain why the code not work as my plan
cam = ipcam('http://192.168.0.102:8080/video');
framesAcquired = 0;
H=0;
i=0;
a= imread('testing.png');
I=rgb2hsv(a); %Convert RGB to HSV
S=I(:,:,2);
S=im2double(S);
% Threshold the image
level = graythresh(S); %Otsu' Method
BW = im2bw(S,level);
A=im2double(a);
P=2000;
BW = bwareaopen(BW,P); %Remove small pixel
% Histogram Red, Green, Blue
R=A(:,:,1);
G=A(:,:,2);
B=A(:,:,3);
dR=R.*BW;
dG=G.*BW;
dB=B.*BW;
rgb=im2double(I);
rgb(:,:,1)=dR;
rgb(:,:,2)=dG;
rgb(:,:,3)=dB;
ReferenceImage=rgb;
%H=H+1;figure(H);
%imshow(ReferenceImage);
while(i<=5) %value sample to test
while (framesAcquired <= 50)
data = snapshot(cam);
framesAcquired = framesAcquired + 1;
diff_im = imsubtract(data(:,:,2),rgb2gray(data)); % subtracting green component from the gray image
diff_im = medfilt2(diff_im, [3 3]); % used in image processing to reduce noise and for filtering
diff_im = im2bw(diff_im,0.12); % convert image to binary image
stats = regionprops(diff_im, 'BoundingBox', 'Centroid'); % measures a set of properties for each connected component in the binary image
drawnow;
imshow(data);
hold on
for object = 1:length(stats)
bb = stats(object).BoundingBox;
bc = stats(object).Centroid;
rectangle('Position',bb,'EdgeColor','b','LineWidth',2)
plot(bc(1),bc(2), '-m+')
end
end
%imwrite(data, 'testing.png');
imwrite(data,sprintf('im%d.jpg',i))
%b= imread('%d.jpg',i);
b = imread(['D:\SEMESTER 5\idp\Ip camera Object Detect\im' num2str(i) '.jpg']);
I=rgb2hsv(b); %Convert RGB to HSV
S=I(:,:,2);
S=im2double(S);
% Threshold the image
level = graythresh(S); %Otsu' Method
BW = im2bw(S,level);
A=im2double(b);
P=2000;
BW = bwareaopen(BW,P); %Remove small pixel
% Histogram Red, Green, Blue
R=A(:,:,1);
G=A(:,:,2);
B=A(:,:,3);
dR=R.*BW;
dG=G.*BW;
dB=B.*BW;
rgb=im2double(I);
rgb(:,:,1)=dR;
rgb(:,:,2)=dG;
rgb(:,:,3)=dB;
TestImage=rgb;
H=H+1;figure(H);
imshow(TestImage);
% Image Comparing method
%------------------------------------------------------&
SubtractedImage = double(ReferenceImage)- double(TestImage);
%H=H+1;figure(H)
%imshow(SubtractedImage, []);
% k-segment method
%---------------------------------------------------%
lab_he = rgb2lab(SubtractedImage);
ab = lab_he(:,:,2:3);
ab = im2single(ab);
nColors = 5;
% repeat the clustering 3 times to avoid local minima
pixel_labels = imsegkmeans(ab,nColors,'NumAttempts',5);
%H=H+1;figure(H)
%imshow(pixel_labels, []);
t = graythresh(pixel_labels);
BW1 = imbinarize(pixel_labels,t);
%H=H+1;figure(H)
%imshow(BW1)
%Remove small Pixel
%---------------------------------------------------------%
Removesmallpixel = BW1;
BW2 = bwareaopen(Removesmallpixel, 700);
%H=H+1;figure(H)
%imshow(BW2);
% Find biggest blops(pixel)
%--------------------------------------------------%
BW3 = BW2;
CC = bwconncomp(BW3);
numPixels = cellfun(@numel,CC.PixelIdxList);
[biggest,idx] = max(numPixels);
%make background become 0
mask = BW3 > 0.5;
% Now everywhere that mask is true, set the original image to zero there.
BW3(mask) = 0;
disp('No contamination! Passes!')
disp('=======================================================')
disp('=======================================================')
disp('=======================================================')
%contamination area become 1
BW3(CC.PixelIdxList{idx}) = 1 ;
H=H+1;figure(H)
imshow(BW3);
%----------------------------------------------%
Measurements = regionprops(BW3, 'Area');
Area2 = [Measurements.Area];
% Perimeter2 = [Measurements.Perimeter];
% MajorAxis2 = [Measurements.MajorAxisLength];
% Extent2 = [Measurements.Extent];
Area_Testing_Shape = sum(Area2)/10000; %devide by 10k to get smaller value
% Perimeter_Testing_Shape = sum(Perimeter2);
% MajorAxis_Testing = sum(MajorAxis2);
% Extent_Testing = sum(Extent2);
fprintf('\t Area_Testing_Shape = %g\n',Area_Testing_Shape );
% fprintf('\t Perimeter_Testing = %g\n',Perimeter_Testing);
% fprintf('\t MajorAxis_Testing = %g\n',MajorAxis_Testing);
% fprintf('\t Extent_Testing = %g\n',Extent_Testing);
disp('=======================================================')
if (Area_Testing_Shape >= 9.7937)
disp('Contamination Detected! Need Eye inspection')
elseif (2.0891 >= Area_Testing_Shape <= 9.7936)
disp('Contamination Detected')
else
disp('Passed!')
end
disp('=======================================================')
disp('=======================================================')
disp('=======================================================')
i = i + 1;
end

채택된 답변

Walter Roberson
Walter Roberson 2021년 1월 12일
You do not reset framesAcquired = 0 inside your for i loop.
  댓글 수: 1
MOHAMMAD AZRUL AIMAN
MOHAMMAD AZRUL AIMAN 2021년 1월 12일
Yes. it's work! thank you so much for answering my question.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Image Processing Toolbox에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by