2016-08-12 30 views
-3

添付画像に緑色の点で示された点の座標を見つけるのを手伝ってください。線の傾きは既知であり、中心の座標は画像に対して既知である。私はMATLABでコードを記述したいと思います。私にも同じアイデアを教えてください。
イメージは、座標が既知の中心点と、中心点を通過する線の傾きを知るために緑色のドット座標で構成されます。画像上の座標の中心点と線の傾きを知る

+0


私のソリューションはここ

は私のコードです...理解(最もエレガントではない)のためにそれほど単純ではありませんあなたの入力は画像であり、画像処理技術を使用して座標を取得したいとしますか? –

+0

こんにちはprashanth、[最小、完全で、検証可能な例](http://stackoverflow.com/help/mcve) – obchardon

答えて

0

私は、中心座標を通り、所望の傾きを持つ座標のベクトルを作成しました。
極座標を使ってX、Y座標ベクトルを作成しました。
座標を見つけた後、私は曲線上の緑色の点を探しました。 (テストのために使用される)

%Input image (for testing). 
I = imread('cameraman.tif'); 
I = cat(3, I, I, I); %Make I it "color" image where (R = G = B). 

center = [100, 100]; 
slope = 1.5; 

%Mark the center point with red (for debugging). 
I(center(1)-1:center(1)+1, center(2)-1:center(2)+1, 1) = 255; 

%Put green dots (for debugging). 
x0 = 123;y0 = 65; 
x1 = 12;y1 = 232; 
I(y0-1:y0+1, x0-1:x0+1, 2) = 255;I(y0, x0, 1) = 0;I(y0, x0, 3) = 0; 
I(y1-1:y1+1, x1-1:x1+1, 2) = 255;I(y1, x1, 1) = 0;I(y1, x1, 3) = 0; 

% # 
% 1.5# # 
% # # 
% # # 
% ## alpha 
% ############ 
%  1 

alpha = -atan2(slope, 1); 

%Create vector of "radius" (distance from the center). 
r = -norm(size(I))/2:0.2:norm(size(I))/2; 

%Each (x,y) coordinate is on the line passing through center point 
x = r*cos(alpha) + center(2); 
y = r*sin(alpha) + center(1); 

%Remove x and y outsize image boundaries from x, y arrays. 
X = x;Y = y; 
X((x < 1) | (x > size(I,2)) | (y < 1) | (y > size(I,1))) = []; 
Y((x < 1) | (x > size(I,2)) | (y < 1) | (y > size(I,1))) = []; 

%Round X and Y (to be legal pixel coordinates). 
X = round(X); 
Y = round(Y); 

R = zeros(size(X)) + 1; %Coordinate of 1'rd plane (red channel). 
G = zeros(size(X)) + 2; %Coordinate of 2'rd plane (green channel). 
B = zeros(size(X)) + 3; %Coordinate of 3'rd plane (blue channel). 

%V gets values of pixels channel pixels in the curve. 
rV = I(sub2ind(size(I), Y, X, R)); %Red channel values. 
gV = I(sub2ind(size(I), Y, X, G)); %Green channel values. 
bV = I(sub2ind(size(I), Y, X, B)); %Blue channel values. 

%Find green dots where r, g, b = 255. 
V = (rV == 0) & (gV == 255) & (bV == 0); 

%Mark X,Y coordinates with blue color (for debugging). 
I(sub2ind(size(I), Y, X, B)) = 255; 

figure;imshow(I) 

v0 = find(V, 1, 'last'); 
v1 = find(V, 1); 
greenDot0 = [Y(v0), X(v0)] 
greenDot1 = [Y(v1), X(v1)] 

結果画像::あなたが意味
enter image description here

1

中心点が知られている場合は、私が想定し、画像処理を行う必要はありません。 必要なのは線形方程式です。

y = tan(slope) * x 

そしてy1y2も写真から知られているので、あなたは単に、x1x2を見つけます。

+0

を書くようにしてください。実際には、傾斜は既に角度の接線です。したがって、「y =勾配* x」 –

関連する問題