画像からの座標の読み取り

50 views (last 30 days)
Chikako Kuriyama
Chikako Kuriyama on 26 Jul 2017
Commented: Chikako Kuriyama on 28 Jul 2017
読み込んだ画像かからエッジを摘出し、その角の座標を取得したいのですが、エッジを摘出したあとにどうすれば良いのかわかりません。
  6 Comments
Chikako Kuriyama
Chikako Kuriyama on 27 Jul 2017
返信ありがとうございます。michioさんが添付していただいた図を最終的に得たいと考えています。
michio
michio on 28 Jul 2017
Image Analyst san, thanks for your offer :) If we see some hard-core image processing issues next time, I'll reach out to you!

Sign in to comment.

Accepted Answer

Tohru Kikawada
Tohru Kikawada on 27 Jul 2017
画像処理でやりたいことがある場合には Image Processing Toolbox の例 をまずは探されることをおすすめします。
たとえば、 こちら のサンプルを活用することでやりたいことが実現できるかと思います。
ご参考まで。
%%Detect Lines in Images Using Hough
% This example shows how to detect lines in an image using the |hough| function.
%%Read an image into the workspace and binarize it
I = imread('https://jp.mathworks.com/matlabcentral/answers/uploaded_files/83898/%3F.png');
BW = imbinarize(rgb2gray(I));
BW = imclearborder(BW);
%%Compute the Hough transform of the binary image returned by |edge|.
[H,theta,rho] = hough(BW);
%%Display the transform, |H|, returned by the |hough| function.
figure
imshow(imadjust(mat2gray(H)),[],...
'XData',theta,...
'YData',rho,...
'InitialMagnification','fit');
xlabel('\theta (degrees)')
ylabel('\rho')
axis on
axis normal
hold on
colormap(gca,hot)
%%Find the peaks in the Hough transform matrix, |H|, using the |houghpeaks|
% function.
P = houghpeaks(H,5,'threshold',ceil(0.3*max(H(:))));
%%Superimpose a plot on the image of the transform that identifies the peaks.
x = theta(P(:,2));
y = rho(P(:,1));
plot(x,y,'s','color','black');
%%Find lines in the image using the |houghlines| function.
lines = houghlines(BW,theta,rho,P,'FillGap',30,'MinLength',50);
%%Create a plot that displays the original image with the lines superimposed
figure, imshow(I), hold on
max_len = 0;
len = zeros(length(lines),1);
for k = 1:length(lines)
xy = [lines(k).point1; lines(k).point2];
plot(xy(:,1),xy(:,2),'LineWidth',1,'Color','green');
% Presave line length
len(k) = norm(lines(k).point1 - lines(k).point2);
end
%%Connect lines
theta = [lines.theta];
theta(theta>0) = -Inf;
[~,min_angle] = max(theta);
theta = [lines.theta];
theta(theta<0) = Inf;
[~,max_angle] = min(theta);
pts = [lines(min_angle).point1; lines(min_angle).point2; lines(max_angle).point2;...
lines(max_angle).point1; lines(min_angle).point1];
plot(pts(:,1),pts(:,2),'LineWidth',2,'Color','red');
  1 Comment
Chikako Kuriyama
Chikako Kuriyama on 28 Jul 2017
本当にありがとうございます。参考にさせていただきます。何度もありがとうございました。

Sign in to comment.

More Answers (2)

Takuji Fukumoto
Takuji Fukumoto on 26 Jul 2017
エッジ検出が終わっているということで、2値化された画像をお持ちの状態かと思います。 regionprops関数を利用するとその画像のパラメータを取得することができます。
取得するパラメータは指定したプロパティで決定でき、 どのような画像かによりますが、'BoundingBox'や'Extrema'などが使えるかもしれません。

Chikako Kuriyama
Chikako Kuriyama on 27 Jul 2017
ありがとうございます!早速試してみます。

Community Treasure Hunt

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

Start Hunting!