Find the center of specific picture area

조회 수: 2 (최근 30일)
Charles P
Charles P 2015년 9월 8일
댓글: Charles P 2015년 9월 8일
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...

채택된 답변

Hamoon
Hamoon 2015년 9월 8일
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)

추가 답변 (1개)

Image Analyst
Image Analyst 2015년 9월 8일
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
Sriram Badri
Sriram Badri 2015년 9월 8일
If you could suggest a way to solve it, it would be really helpful. N thanks a lot

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

Community Treasure Hunt

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

Start Hunting!

Translated by