
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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 【プログラミングScratch】で音楽を演奏するプログラムを短時間でつくる方法 2 2023/07/02 07:50
- C言語・C++・C# 画像の画素値を変えるC言語のプログラムで指定された画像の中に白い三角形を右上に表示させるにはどのよう 3 2022/10/30 01:16
- 掃除機・クリーナー・空気清浄機 Dysonの掃除機DC26をもってるのですが、先日間違えて画像のモーターヘッドを購入してしまいました 2 2023/01/01 09:39
- Oracle SELECTによる表の変換方法を教えてください 2 2023/07/16 01:26
- その他(コンピューター・テクノロジー) Mind masterで挿入した画像を縦向きにしたい 1 2023/03/02 08:44
- PDF Word→pdfに変換する際,図形部分に画像が上書きされる 1 2023/02/01 12:49
- PDF 画像調整してスクショし保存した画像を印刷する方法 1 2022/03/31 18:42
- Excel(エクセル) Excelシフト表 固定シフトの自動変換化 1 2022/04/14 16:10
- その他(メールソフト・メールサービス) メールソフトを教えてください 1 2023/03/28 23:32
- フリーソフト 倍率自動調整して全画面表示できるフリーの画像ビューアー 1 2023/08/24 10:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DLLファイルの逆コンパイラにつ...
-
プログラマー達は何故、プログ...
-
最初に聞かれたこと
-
あってる
-
大量のデータを読み込んで表示...
-
c言語の問題の説明、各所ごとに
-
【C言語】全角文字の配列を、全...
-
visual studio 2022でのC#プロ...
-
gccを行ってもexeファイルが生...
-
C++でデスクトップGUIアプリ開...
-
プログラミング言語についてc++...
-
プログラム言語について c言語...
-
C#でログファイルにファイルパ...
-
c#のTLS1.2での通信について
-
int16_t の _t は何?
-
C言語 1から20までの逆数の和を...
-
C言語の関数のextern宣言
-
UART通信の取説で,left floati...
-
逆コンパイルと逆アセンブルの...
-
右ビットシフト
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
生年月日(yyyy/MM/dd) → 年齢...
-
C++/CLIで画像処理
-
色混ぜのアルゴリズム
-
直線と線分の交差判定について...
-
解像度と誤差について
-
ノイズ処理の原理
-
画像をFFTした際のスペクトル分...
-
OpenCVで寸法測定
-
姿勢センサでプロジェクタの台...
-
アフィン変換後の画像に線が入...
-
行列の積の処理を高速化したい
-
リアルタイムで多数の3角形ポリ...
-
魚眼画像について
-
2枚の画像間の色ヒストグラム距...
-
OpenCVで、画像の平均階調値よ...
-
画像の拡大
-
点字認識システムを作成したい...
-
自動で仮説を立てるような学習...
-
C言語の作成依頼です。
-
Canny法に用いる閾値の決定法に...
おすすめ情報