[英]how to converting pixel coordinates x and y of an image to an image in matlab?
[英]print x,y coordinates of selected pixel of an image in matlab
我正在一個項目中,我要提取給定圖像的輪廓。 我有兩張圖片; 前景圖像和背景圖像。 我對這些圖像進行減法運算,並設置差值不等於零的條件。 然后我打印該坐標值。 這是我當前的代碼:
I=imread('starObject.jpg')
B=rgb2gray(I);
imshow(I);
A=imread('starB.jpg');
C=rgb2gray(A);
[columns rows]=size(C)
Diff(i,j)=B(i,j)-C(i,j);
if (Diff(i,j)>0||Diff(i,j)<0)
fprintf('1st difference');
disp(Diff(i,j));
end
end
end
imshow(Diff);
上面的代碼打印像素的差值。 我要坐標。 我怎樣才能做到這一點?
在上面的代碼中, i
和j
已經是像素坐標。 對於打印,您可以使用類似這樣的內容
[rows, columns] = size(C); %# rows are first!!
for i = 1 : rows
for j = 1 : columns
if (Diff(i,j) ~= 0)
sprintf('(%d, %d)', i, j);
end
end
end
例如。
另一種方法是使用find()
函數,看起來可能像這樣
[r, c] = find(Diff ~= 0);
for idx = 1 : length(r)
sprintf('(%d, %d)', r(idx), c(idx));
end
順便說一句:在Matlab中使用i
和j
作為變量是一個非常非常糟糕的主意,因為通常使用它來定義復數。 別驚訝,如果
x = 10 + 20*j
循環后不再起作用。
向量化您的代碼。 不要使用for循環來遍歷坐標,它很慢,很丑陋,而不是該語言的編寫方式。 查看以下內容是否適合您。
A = rgb2gray (imread ('starObject.jpg'));
B = rgb2gray (imread ('starB.jpg'));
Diff = B - C;
inds = find (Diff);
sprintf ("Different at indexes: %i\n", inds);
如果要打印下標而不是線性索引,請使用ind2sub
將一個轉換為另一個,或使用兩個輸出參數查找。 例如:
[iRows, iCols] = find (Diff);
printf ("Different at coordinates (%i, %i)\n", [iRows'; iCols']);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.