Find the center of specific picture area
1 view (last 30 days)
Show older comments
Hi, I'm quite new to Matlab.
I want to identify the center of a specific picture area.
In my case, I have 2 pictures which I determined the difference between each other (Subtraction). Resulting of a white area, marking the difference. Here's my problem, I cannot find roughly the center of my white area. Note that I have no error in the execution, just a problem with this calculus. Can someone help me with this please. Here's a sample of my code:
clear all; close all;
%Access to the pictures
[filename, pathname] = uigetfile({'*.jpg;*.tif;*.PNG;*.gif;*.bmp','All Image Files';...
'*.*','All Files' },'img1',...
'C:\Users\CAP\Desktop\SCHOOL\MATLAB\cible.jpg')
img1 = imread(filename);
if (length(size(img1))>2)
img1=img1(:,:,1);
end
[filename, pathname] = uigetfile({'*.jpg;*.tif;*.PNG;*.gif;*.bmp','All Image Files';...
'*.*','All Files' },'img2',...
'C:\Users\CAP\Desktop\SCHOOL\MATLAB\cibleref.jpg') image
img2 = imread(filename);
if (length(size(img2))>2)
img2=img2(:,:,1);
end
%Determination of the difference between the 2 pictures by Subtraction
[ligne colonne]=size(img1);
image_result=uint8(zeros(ligne,colonne));
for i = 1: ligne
for j = 1 : colonne
if img1(i,j)>=img2(i,j)
image_result(i,j)= img1(i,j)-img2(i,j);
else
image_result(i,j)= img2(i,j)-img1(i,j);
end
end
end
%Finding the coordinates of the white zone (difference)
[x,y]=find(image_result>128); %0:black 255:white
x1=(sum(x)/length(x)); %Trying here to figure out the center of my white area
y1=(sum(y)/length(y)); %Trying here to figure out the center of my white area
% Display
figure(1)
subplot(221)
imshow(img1)
subplot(222)
imshow(img2)
subplot(223)
imshow(image_result)
hold on;
plot(x1,y1,'r.','MarkerSize',20)
Top Right: Reference Image
Top Left: Image including difference
Bottom: Result image by subtraction. The Red dot corresponds to the result of my white zone determination. As you can see there is a sightly error in the calculus...
0 Comments
Accepted Answer
Hamoon
on 8 Sep 2015
That's because x1 refers to columns of the image and y1 refers to the rows of the image, so for plot you should write:
plot(y1,x1,'r.','MarkerSize',20)
in plot we first write rows and then columns: plot(rows,columns)
More Answers (1)
Image Analyst
on 8 Sep 2015
find() returns [y, x], (which is rows, columns). find() does not return [x, y] like you have. Switch that and you'll have fewer problems. Of course you don't need a double for loop, and can just use regionprops() like in my image segmentation tutorial: http://www.mathworks.com/matlabcentral/fileexchange/?term=authorid%3A31862
4 Comments
Sriram Badri
on 8 Sep 2015
This is the link for the question.
Sriram Badri
on 8 Sep 2015
If you could suggest a way to solve it, it would be really helpful. N thanks a lot
See Also
Categories
Find more on Subplots in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!