Find the center of specific picture area

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...

 Risposta accettata

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)

Più risposte (1)

Image Analyst
Image Analyst il 8 Set 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 Commenti

Hi Image analyst I have a different problem and I need your help. Can you please tell me how I can contact you?
You just did.
If you could suggest a way to solve it, it would be really helpful. N thanks a lot

Accedi per commentare.

Community Treasure Hunt

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

Start Hunting!

Translated by