ともさんのHP >プロブラミング >自作JavaLibrary >【Java】画像の座標変換のためのクラス

Javaで画像加工

Javaでxy座標を変換するクラスを作りました。
目的は画像の複雑な処理をするため。
たとえば、こんな画像を
変換前の画像

広告

こんな感じに丸めてパノラマ写真にするとか。
下の写真は同一写真で構成していますが、360度撮影した画像で構成すれば 本当のパノラマ写真になります。
変換後の画像


作ったクラスで出来る座標変換は、 平行移動、回転、xy方向の伸縮、扇型、の4つ。


平行移動
下の画像を-250y方向に移動しています。
平行移動の画像


回転移動
下の画像を-250y方向に移動した後-10度回転。
回転移動の画像


伸縮
下の画像を-250y方向に移動した後、y方向に0.5倍。
伸縮の画像


扇形の変形
下の画像を-250y方向に移動した後、扇型に変形。
扇型の画像


こんな感じに座標変換すれば、写真を扇子にすることも出来そうですね。
扇型の画像


以下がJAVAのソース。XY座標を変換するクラスです。画像を変換するクラスは後日UPの予定。


package tomojavalib.gazou;

/**
 * XY座標を変換するためのクラス
 * @author tomo
 *
 */
import tomojavalib.gazou.*;

public class ZahyouHenkan {
private XY xy =null; 
  
  
  /**
   * @param args
   */
  public static void main(String[] args) 
  {
     XY xy = new XY();
     xy.setXY( 100. , 0. );
     ZahyouHenkan zh = new ZahyouHenkan();
     //xy = zh.kaiten(xy, 275.);
     System.out.println( xy.x +" , " + xy.y );
     xy = zh.ougi( xy , 110);
     System.out.println( xy.x +" , " + xy.y );
  }

  
  
public ZahyouHenkan()
{
  xy = new XY();
}

/**
 * 扇型に座標変換
 * @param xy 入力座標
 * @param r 中心半径
 * @return
 */
public XY ougi( XY xy , double r )
{
  double r2 = r + xy.y ;
  double sita = xy.x / r ;
  xy.x = r2 * Math.sin( sita );
  xy.y = r2 * Math.cos( sita );
  return xy;
}


/**
 * 座標をx,y倍に伸縮する
 * @param xy
 * @param x
 * @param y
 * @return
 */
public XY sinsyuku(XY xy,double x , double y)
{
  xy.x = xy.x * x;
  xy.y = xy.y * y;
  return xy;
}




/**
 * 平行移動
 * @param xy 入力座標
 * @param x 移動座標
 * @param y 移動座標
 * @return 平行移動後の座標
 */
public XY heikou(XY xy , double x , double y )
{
  xy.x = xy.x + x;
  xy.y = xy.y + y;
return xy;
}

/**
 * 座標を回転させる
 * @param xy 入力座標
 * @param sita 回転角度(°)
 * @return 回転後座標
 */
public XY kaiten( XY xy ,double sita)
{
  double xx = xy.x*Math.cos(sita * Math.PI / 180.0) - xy.y*Math.sin(sita * Math.PI / 180.0);
  double yy = xy.x*Math.sin(sita * Math.PI / 180.0) + xy.y*Math.cos(sita * Math.PI / 180.0);
  xy.setXY(xx, yy);
/*
double r = Math.sqrt( xy.x*xy.x + xy.y*xy.y ); //半径
if( r == 0. ){ return xy; }
double sita1 = Math.asin( xy.y/r ); //角度
double sita2 = (sita * Math.PI / 180.0) + sita1;//回転後角度
xy.x = r * Math.cos(sita2);
xy.y = r * Math.sin(sita2);
*/
return xy;
}

}

最終更新日: 2017-08-16 10:56:29

ともさんのHP >プロブラミング >自作JavaLibrary >【Java】画像の座標変換のためのクラス

このエントリーをはてなブックマークに追加
広告
おすすめ記事
新着ページ

マムシに咬まれない対策  
自動水やり器の自作  
ボタンやラベルの修飾方法  
ツールチップの表示  
アイコンの差し替え  
日本ミツバチ用重箱式巣箱の各部名称と機能  
柿の消毒  
IMEの自動設定  
みつばち日記  
初心者用巣箱その1  
アプリ終了時にダイアログを表示  

私の他のサイト

ともさんの箱庭(ブログ)
家庭菜園
3D-CAD
洋裁CAD

いいねなど

 RSS 
PageSpeedInsights
html5チェック

Author: Tomoyuki Ito

このサイトの文章・写真の無断転載を禁じます