No.2ベストアンサー
- 回答日時:
> これがいわゆる『元画像 のX,Yに対応するX',Y'、という計算でやる』ということなのでしょうか?
そうです。
これはプログラミングの問題ではなく、アルゴリズムの問題です。
もっとも単純な解決法としては、元画像の(X, Y) に対応する (X', Y') を計算するのではなく、変換後の (X', Y') に対応する元画像の (X, Y) を求めるという方法を使います。これを最近傍法といいます。
詳しくは画像処理について勉強して下さい。
キーワード: 補間、最近傍法、バイリニア法、バイキュービック法…
連絡が遅くなり申し訳ありません。
記載されている方法を試したところ、無事に線の無いきれいな画像が得られました。
とりあえずこの画像で十分研究は進められるのでこれでいきます。
余裕ができたらバイリニア、バイキュービックについても勉強して試していきたいと思います。
ありがとうございました。
No.1
- 回答日時:
具体的にどんな手法でやってますか?
ドットで表現された画像を変形する際に注意しないといけないのは「座標は整数しか使えない」ということです。
元画像 のX,Yに対応するX',Y'、という計算でやると、X',Y'に使われない座標が出ることがあります。
この回答への補足
せっかく回答していただいたのに返事が遅くなり申し訳ありません。
『元画像 のX,Yに対応するX',Y'、という計算でやる』の意味があまりよくわかっていません。
画像は全て256×256×256の画像です。
あらかじめ4×4のアフィン変換のパラメータの配列を用意し、値を入れておきます。
そして変換前の座標を1つ1つパラメータに当てはめて、変換後の座標を出します。
最後に変換前の座標のピクセル値を変換後の座標の位置へ移動させるという風にしています。
参考に、プログラムを貼り付けておきます。
void TClass_AFFINE3D::ConvertCoordinate
(double** matrix, double x, double y, double z, double *cx, double *cy, double *cz)
{
*cx =
matrix[0][0] * x +
matrix[1][0] * y +
matrix[2][0] * z +
matrix[3][0] * 1;
*cy =
matrix[0][1] * x +
matrix[1][1] * y +
matrix[2][1] * z +
matrix[3][1] * 1;
*cz =
matrix[0][2] * x +
matrix[1][2] * y +
matrix[2][2] * z +
matrix[3][2] * 1;
}
void TClass_AFFINE3D::affine_3d_main_using_matrix_info(
short ***img_in,short ***img_out,int x_size,int y_size,int z_size,double **matrix)
{
int i,j,n;
double cx;
double cy;
double cz;
double out_cx,out_cy,out_cz;
// 座標変換
for(n = 0; n < z_size; n++)
{
for (i = 0; i < y_size; i++)
{
for (j = 0; j < x_size; j++)
{
cx=j;
cy=i;
cz=n;
//matrix数値入力による変換
ConvertCoordinate(matrix, cx, cy, cz, &out_cx, &out_cy, &out_cz);
cx=out_cx;
cy=out_cy;
cz=out_cz;
int i_cx,i_cy,i_cz;
i_cx=(int)cx;
i_cy=(int)cy;
i_cz=(int)cz;
if(i_cx>=0&&i_cx<x_size&&i_cy>=0&&i_cy<y_size&&i_cz>=0&&i_cz<z_size){
img_out[i_cz][i_cy][i_cx]=img_in[n][i][j];
}
else{
}
}
}
}
}
これがいわゆる『元画像 のX,Yに対応するX',Y'、という計算でやる』ということなのでしょうか?
対処法は何かありますでしょうか?
まだまだプログラミングは初心者のため、初歩的なことなのかもしれませんが教えていただけると幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
色混ぜのアルゴリズム
-
ワープロソフトの製作難易度
-
Windows Media Playerを開くと...
-
Google ColaboでGUI作成
-
IPアドレス、サブネットマスク...
-
ランタイムの要らない言語
-
VB.NET とドットNET(.NET...
-
モバイルCというC言語のプログ...
-
強化学習の環境作成、AI。自動...
-
[DirectX]SDK直叩き or 既存の...
-
プログラマーで「使えない人」...
-
【VC++】MFC、C++/CLI(CLR)、...
-
Ps+のフリープレイでDestiny2の...
-
python urlopen error について...
-
本格的なGUIを作るのにおすすめ...
-
パソコン
-
iCloudフォトライブラリ内の画...
-
外付けHDDにあるiTunesのデータ...
-
iPhoneのカメラロールへ画像を...
-
人工知能の勉強
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
生年月日(yyyy/MM/dd) → 年齢...
-
OpenCVで寸法測定
-
色混ぜのアルゴリズム
-
姿勢センサでプロジェクタの台...
-
直線と線分の交差判定について...
-
点字認識システムを作成したい...
-
角が丸部分を画像上から検出す...
-
C++/CLIで画像処理
-
VB BitmapをExcelに貼り付け 大...
-
HBITMAPを初期化するとは?
-
画像解析 ライン認識 2値化 ...
-
画像の2値化について
-
Canny法に用いる閾値の決定法に...
-
行列の積の処理を高速化したい
-
線幅の測定
-
VBを使った自作の逆FFT
-
Windows Media Playerを開くと...
-
Google ColaboでGUI作成
-
python urlopen error について...
-
VB.NET とドットNET(.NET...
おすすめ情報