簡體   English   中英

在Matlab中打印圖像的選定像素的x,y坐標

[英]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);  

上面的代碼打印像素的差值。 我要坐標。 我怎樣才能做到這一點?

在上面的代碼中, ij已經是像素坐標。 對於打印,您可以使用類似這樣的內容

[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中使用ij作為變量是一個非常非常糟糕的主意,因為通常使用它來定義復數。 別驚訝,如果

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM