なんとなく、ふわっと・・

写真と画像処理関係とひとりごとをなんとなく書き溜めていきたい

Hula4

2007-09-30 16:26:02 | rinkaku


「まつり つくば 2007」より

Comments (2)

簡単な自作フィルタで遊ぶ

2007-09-30 00:11:07 | processed

まず元画像。


天久保、つくば市

Demon


同じ中心に半径を小さくしながら AntiSphere を繰り返す。


同じ中心に半径を小さくしながら Sphere を繰り返す。


Demon に InsideOut。


Demon に Geometric Inversion。


SpiralDemon。


SpiralDemon に InsideOut。




Comment

Sleeping Beauty

2007-09-30 00:02:31 | rinkaku





Comment

Turbo Delphi Explorer のテスト

2007-09-29 19:28:39 | Delphi
早速、動作テストをした。

Turbo Delphi Explorer では、残念ながら新たなコンポーネントをインストール
できないようだ。また、コンパイラが検索するファイルパスも追加することが
できないようだ。そこで、自作の VCLImageUtils.pas やここここでやった
PngImage、GifImage のユニットファイルは、ダウンロードして解凍した
すべてのファイルを、あらかじめパスが通っている $(BDS)lib ディレクトリに
すべてコピーした。これで使えるようになった。

テストとして、上記のすべてを使う LoadCheckedImage() 関数を試してみた。




うまくいっているようだ。

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses
  VCLImageUtils;

procedure TForm1.Button1Click(Sender: TObject);
var
  bmp: TBitmap;
  filename: string;
begin
    filename := 'C:\Home\Img\hana.png';
    bmp := LoadCheckedImage(filename);
    if Assigned(bmp) then
    begin
      Canvas.Draw(5, 5, bmp);
      bmp.Free;
    end;
end;

end.


Comment

Turbo Delphi Explorer for Win32

2007-09-29 00:33:56 | Delphi

Turbo Delphi Explorer for Win32 をインストールした。

PC を新しくして5ヶ月になるけど、やはり Delphi がないのはさびしい。
前の PC には Delphi5pro と Delphi6Personal が入っていたけど、
ちょっと古すぎな感じがする。

Delphi については、すっかり浦島太郎状態だが、お目当ての Delphi6Personal は
いまは使えないらしく、ここを参考にして Turbo Delphi Explorer for Win32 を
インストールした。これは、フリー版では最新のものであるらしい。





なんだか面倒な手続きがあって、BDN の登録からはじめて2時間ちかくかかったが
無事インストールに成功したらしい。いままでつくった画像処理用のライブラリを拡充して
いきたい。しばらく楽しめそうだ。


Comment

reflection

2007-09-29 00:17:48 | 写真


吾妻1、つくば市


つくば三井ビル


つくば三井ビル

Comment

purple

2007-09-29 00:01:38 | rinkaku




[Multi-Colored-Rinkaku]

Comment

今日の日没後

2007-09-28 22:27:16 | 写真



平沢、つくば市

勤務時間後に急いで行ったけれど、日没には10分くらい間に合わなかった。


Comment

Lily

2007-09-28 00:25:21 | processed



元画像はこれ。


at Sieger、二の宮2、つくば市


[suisai saturation]


Comment

GeometricInversion8

2007-09-28 00:10:29 | processed

幾何反転による画像の反転。



元画像はこれ。



幾何反転は単純な座標変換だが、非常に面白い。
ちゃんと補間を行えば画像の劣化も目立たない。

[Geometric Inversion]

Comment

Y

2007-09-28 00:08:25 | rinkaku




Comment

刺繍

2007-09-27 00:20:12 | 写真

家内の作品。額に入れて戻ってきたばかり。



そのディテール。




Comment

NotGraffiti17_1

2007-09-27 00:11:58 | processed



同日にとった花を crop して重ねた。今年の3月ごろかな。

Comment

りんご

2007-09-27 00:07:53 | rinkaku




[rinkaku crop smoothedge]


Comment

色をかぞえる

2007-09-26 19:46:57 | C#(Graphics)
24ビットカラーの画像の中の色の数をかぞえるために、これまでに
ArrayList を使った関数をライブラリでつくってきた。ところで、
最近、申し訳ないがどこか探せないのだが Delphi で TBits クラスを
つかった実装を見かけた。論理的には、ArrayList で全色を保持して
ソートすることにより、色数をかぞえるよりスマートで、画像のサイズ
が大きくなるほど、速いと思われる。

C# で Delphi の TBits に相当するクラスは BitArray クラスである。
これは項目ごとに Boolean 値を保持できる。これをつかって、色を
かぞえるのは簡単かつソートがいらないので高速であるはずである。

さっそく試してみた。今回試した色をかぞえる画像はこれである。


ラ・フランドル、二ノ宮2、つくば市

結果は、以下に示すように、これまでの関数より2倍くらい速い。
ライブラリも変更することにしよう。






using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using ImageUtils;

using System.Collections;

namespace CountColors
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public static int CountColors(Bitmap bmp)
        {
            if (bmp.PixelFormat != PixelFormat.Format24bppRgb)
                return -1;

            int w = bmp.Width;
            int h = bmp.Height;

            BitArray ba = new BitArray(0x1000000, false);

            int count = 0;
            int indx;
            int ir;

            BmpProc24 src = new BmpProc24(bmp);

            for (int y = 0; y < h; y++)
                for (int x = 0; x < w; x++)
                {
                    ir = src.IndexR(x, y);
                    indx = (int)((((src[ir] << 8) | src[ir - 1]) << 8) | src[ir - 2]);
                    if (!ba[indx])
                    {
                        ba[indx] = true;
                        count++;
                    }
                }

            src.Dispose();

            return count;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Bitmap bmp = new Bitmap(@"c:\Home\ImgWork\LaFlandre.png");

            StopWatch.Start();

            int cn = CountColors(bmp);

            StopWatch.Stop();            

            label1.Text = cn.ToString() + " colors";
            label2.Text = StopWatch.time.ToString() + " ms";


            StopWatch.Start();

            cn = ImgUtils.CountColors(bmp);

            StopWatch.Stop();

            label3.Text = cn.ToString() + " colors";
            label4.Text = StopWatch.time.ToString() + " ms";


            bmp.Dispose();

        }
    }
}

Comments (2)