1

ここに画像の説明を入力

上の画像には、一連の既知のピクセル座標を持つ 2 つの曲線が示されています。外側の曲線を円に変換してから、2 つの曲線間のすべてのポイントの距離と 2 つの曲線間の領域が保持されるように内側の曲線を再マッピングする方法はありますか?

これを行う方法の 1 つは、2 つの曲線の間の領域を小さな四角形のセクションに分割することです。四角形の上部と下部は、所定の長さの外側と内側の曲線になります。四角形の辺は 2 つの曲線の間を横方向に走り、まっすぐである必要があります。変換後、外側の曲線は円弧になり、内側の曲線は距離を維持するために変換前の距離に従って調整されます。面積を維持するために、四角形の横線は、それらが向いていた角度を調整しますが、面積を維持するために直線のままです。

問題は、これをコーディングする方法や、リージョンをより小さなセクションに分割する方法が思いつかないことです。

私の問題にどのようにアプローチできるかについて他に提案があれば、私はそれらを受け入れます。

4

1 に答える 1

1

面積と距離の両方を維持することは不可能だと思います。x と y が x-元の形状の座標と y 座標)、または距離のみ。以下に例を示します。

編集:もう少し考えてみました。以下のコードには、外側の円の半径のパラメーターがあり、線の長さを変更せずに領域に影響を与えるように自由に変更できます。もちろん、領域を拡大縮小する部分を省略して、以下のコードを関数に変換し、最適化関数の 1 つを使用して、同じ線の長さで最も近い領域を取得する外側の円の半径を見つける必要があります。

% Area normalisation flag
norm_area = true;

% Start with two circles, perturb them randomly
N = 100;
phi = linspace(0, 2*pi, N)';

% Set radii
r = [2 4];

% Generate data
r_pert = repmat(r, N, 1);

% Filter some random data (so it's smoothish)
filtOrd = 20;
b = ones(1, filtOrd) / filtOrd;
randData = filter(b, 1, randn(size(r_pert)));
randData = bsxfun(@minus, randData, mean(randData));
r_pert = r_pert + randData;

% Initial plot
close all;
polar(phi, r_pert(:, 2));
hold on;
polar(phi, r_pert(:, 1));

% Generate circle that encloses all radii
r_pureCirc = max(r_pert(:));

% Line lengths
lens = abs(r_pert(:, 2) - r_pert(:, 1));

r_pertCirc = r_pureCirc - lens;

% Calculate area of new and old shapes
% Elemental area is a pie slice between phi(n) - dphi/2 and phi + dphi/2
dphi = phi(2) - phi(1);
dA_orig = dphi * (r_pert(:, 2) .^ 2 - r_pert(:, 1) .^ 2) / 2;
dA_new = dphi * (r_pureCirc .^ 2 - r_pertCirc .^ 2) / 2;
A_orig = sum(dA_orig);
A_new = sum(dA_new);

r_new = [r_pertCirc repmat(r_pureCirc, N, 1)];
if norm_area
    % Normalise to same area
    r_new = sqrt(A_orig / A_new) * r_new;
end

% Plot again
figure;
polar(phi, r_new(:, 2));
hold on;
polar(phi, r_new(:, 1));

このコードでは、フィルタリングされたランダム ノイズによって妨げられた円のペアが生成されます。これは、元の図面 (ish) と同様です。極座標で作業すると、元の形状全体が収まる円が生成されます。元の円の距離を維持するために、2 番目の円の内側の点が計算されます。必要に応じて、新しい形状と元の形状の面積の比率で全体をスケーリングします。

プロットの例:

元の形状

元の形状

生成された形状

生成された形状

于 2013-03-19T15:09:26.977 に答える