How I can make automatic program to detect the spots!

Hi everyone, I have a problem which is I have a small parking and I need to detect the spots automatic rather than manually, in the figure below this my parking and I did a program to take image from my camera and cut it to get each spot alone but the problem if I move the camera I have to change the Coordinates see the code..
data1 = imread('data_car_01.png');
data1_gray = rgb2gray(data1);
A1 = imcrop(data1_gray,[140 0 240 300]);
subplot(3,3,2);
imshow(A1);
% % % Second Spot Picture 1
B1 = imcrop(data1_gray,[370 0 230 300]);
subplot(3,3,3);
imshow(B1);
% % % Third Spot Picture 1
C1 = imcrop(data1_gray,[590 0 235 300]);
subplot(3,3,4);
imshow(C1);
% % % Forth Spot Picture 1
D1 = imcrop(data1_gray,[820 0 500 300]);
subplot(3,3,4);
imshow(D1);
so how I can make it in automatic way..

답변 (1개)

KSSV
KSSV 2017년 3월 13일
data = imread('data_car_01.png');
[r, c, n] = size(data);
% Convert to monochrome.
redPlane = data(:, :, 1);
greenPlane = data(:, :, 2);
bluePlane = data(:, :, 3);
% Find the standard deviation of each color channel.
redStdDev = std(single(redPlane(:)));
greenStdDev = std(single(greenPlane(:)));
blueStdDev = std(single(bluePlane(:)));
% Take the color channel with the highest contrast.
% Transfer it into a monochrome image. This will be the one that we use.
if redStdDev >= greenStdDev && redStdDev >= blueStdDev
% Red has most contrast - use that channel.
monoImage = single(redPlane);
elseif greenStdDev >= redStdDev && greenStdDev >= blueStdDev
% Green has most contrast - use that channel.
monoImage = single(greenPlane);
else
% Blue has most contrast - use that channel.
monoImage = single(bluePlane);
end
maxValue = max(max(monoImage));
minValue = min(min(monoImage));
monoImage = uint8(255 * (single(monoImage) - minValue) / (maxValue - minValue));
% Threshold to get the walls. This will also sharpen up blurry, fuzzy wall edges.
thresholdValue = uint8((maxValue + minValue) / 2);
binaryImage = 255 * (monoImage < thresholdValue);
I = binaryImage ;
I(I==0) = 100 ;
I(I==255) = 0 ;
[L,num] = bwlabel(I,4) ;
vislabels(L)
Use vislabels from the link: https://in.mathworks.com/matlabcentral/fileexchange/19665-visualize-output-of-bwlabel/content/vislabels.m. You can get your region of interest using L==1. L==2 etc.
Please note that the above code is taken from https://in.mathworks.com/matlabcentral/fileexchange/27175-maze-solution by Image Analyst.

댓글 수: 1

thanks for your answering but sir I want to cut every spot alone in above code it determine the lines and its good but I need each spot alone save in different variable did you get the idea please ??

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

카테고리

도움말 센터File Exchange에서 Image Processing and Computer Vision에 대해 자세히 알아보기

질문:

2017년 3월 12일

댓글:

2017년 3월 13일

Community Treasure Hunt

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

Start Hunting!

Translated by