画像内ターゲットの長さを出すにはどうすればいいですか?
1 view (last 30 days)
Show older comments
二値化された画像で、特定のベクトル方向でターゲット(白色)の最大長さを出したいです。
ベクトルについては、2×2の行列の2列目をベクトル方向にしたいと考えています。
行列から特定の列や行をベクトルにするやり方も教えていただきたいです。
ご教授いただきたいと存じます。
Accepted Answer
Hernia Baby
on 14 Nov 2022
Edited: Hernia Baby
on 14 Nov 2022
コメントを見まして、先回の回答と照らし合わせながらお答えします
まずはバイナリイメージを散布データに変えられたところから始めます
clear; clc; close all
データ生成を行います
rng default
u1=5*randn(1,10000);
u2=randn(1,10000);
x1=1/2^0.5*u1+1/2^0.5*u2;
x2=1/2^0.5*u1-1/2^0.5*u2;
X=[x1 ; x2];
SVDをかけます
X=X-mean(X,2); % 平均値を中央へシフト
[U,S,V]=svd(X); % SVD
[m, n]=size(X);
S2=S(1:m,1:m); Values=S2^2/n; % 固有値
Vectors=U; % 固有ベクトル
Amplitudes=S*conj(V'); % 直交振幅の計算
可視化します
subplot(1,2,1);
plot(X(1,:),X(2,:),'.', ...
Values(1,1)*[0 ; Vectors(1,1)], ...
Values(1,1)*[0 ; Vectors(2,1)],'m', ...
Values(1,1)*[0 ; Vectors(1,2)], ...
Values(1,1)*[0 ; Vectors(2,2)],'g');
daspect([1 1 1]);
xlim([-20 20]); ylim([-20 20]);
title('Original Data');
subplot(1,2,2);
plot(Amplitudes(1,:),Amplitudes(2,:),'r.');
daspect([1 1 1]);
xlim([-20 20]); ylim([-20 20]);
title('Orthognal Amplitudes');
------------------------------------------------------------------------
上記までが先回のおさらいになります
以下が第二主軸での長さを出す順です
ここで第二主軸の幅を0.15以内に絞って見てみます
idx = abs(Amplitudes(1,:)) <= 0.15; % 第一主軸0.15のバラツキを許容
Amp1 = Amplitudes(1,idx); % 0.15 内の横軸
Amp2 = Amplitudes(2,idx); % 0.15 内の縦軸
Amp2Max = max(Amp2); % 縦軸上の最大値
Amp2Min = min(Amp2); % 縦軸上の最小値
DAmp2 = Amp2Max - Amp2Min % 最大 - 最小
参考までに可視化を行います
Amp1Max = Amp1(Amp2 == Amp2Max);
Amp1Min = Amp1(Amp2 == Amp2Min);
figure
plot(Amplitudes(1,:),Amplitudes(2,:),'r.');
daspect([1 1 1]);
xlim([-20 20]); ylim([-20 20]);
title('Orthognal Amplitudes');
hold on
xline(0)
% scatter(Amp1,Amp2,10,'ko','filled');
scatter(Amp1Max, Amp2Max,20, 'bo', 'filled')
scatter(Amp1Min, Amp2Min,20, 'bo', 'filled')
text(Amp1Max + 1, Amp2Max + 2, sprintf('Max(%0.3f,%0.3f)',Amp1Max, Amp2Max))
text(Amp1Min + 1, Amp2Min - 2, sprintf('Min(%0.3f,%0.3f)',Amp1Min, Amp2Min))
More Answers (0)
See Also
Categories
Find more on 領域とイメージのプロパティ in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!