移動平均フィルターとエッジ抽出(FreeMat,MATLAB)

% 移動平均フィルターとエッジ抽出(FreeMat,MATLAB)

XX=imread('C:\FreeMat\2_1 EdgeDetect\An00.png');

XX=double(XX)./255;
YY=0.299*XX(:,:,1)+0.587*XX(:,:,2)+0.114*XX(:,:,3);
YY=(YY(:,1:end-3)+YY(:,2:end-2)+YY(:,3:end-1)+YY(:,4:end))./4;
YY=(YY(1:end-3,:)+YY(2:end-2,:)+YY(3:end-1,:)+YY(4:end,:))./4;

YY=(abs(YY(1:end-2,1:end-2)-YY(2:end-1,1:end-2))<0.005 & ...
    abs(YY(1:end-2,1:end-2)-YY(1:end-2,2:end-1))<0.005);   

imwrite(YY,'C:\FreeMat\2_1 EdgeDetect\An01.png');

 

カラー写真の右半分の色の変化を階段状にする(FreeMat)

% カラー写真の右半分の色の変化を階段状にする(FreeMat)

% 左右に同じ写真をコピーしておいて、変化具合を見比べます。
% Windowsペイントで、塗りつぶし機能と写真の左半分から色を選ぶ機能で修正して仕上げます。
XX=imread('D:\ichi\android.png'); YY=double(XX)./255;

YY(:,400:end,:)=round(YY(:,400:end,:).*5)./5;

imwrite(YY,'D:\ichi\Android01.png');

上の写真は右半分(400より右)だけの画像です。

 

 

 

 

 

デジカメ写真で3D計測 MATLAB/FreeMat

少しずらせて撮影した2枚の写真を用いて対象までの距離を計算する。5000x3000の画像での計算時間はMATLABで2分。1000x700なら数秒です。

pythonとMATLABで1から1億までの和の計算速度を比較しました。

# matlabの計算時間 0.38 秒
s=sum(1:100000000)

# pythonの計算時間 10秒
s=sum(range(1,100000001));print(s)  

ただし、プログラムはやや複雑ですがpythonでもnumpyをimportすれば早くなります。
pythonでは時間を計るのにimport timeも必要です。

# pythonの計算時間 0.9 秒
import numpy as np;
a=np.arange(1,100000001,dtype=np.int64);
print(a.sum()); 

% FreeMatの計算時間 25秒
s=sum(1:100000000)

ホワイトボードに板書した内容の写真を見やすくするプログラム。新聞記事のスマホ写真も綺麗にできます。

% 板書や新聞記事のスマホ写真を見やすくするプログラム。

% ペイントなどで加筆修正して残せます。プログラムは3行だけ。

X=imread('IMG_20160611_143309.jpg');% デジカメ写真を読み込む

% 次の行の数値は写真の写り具合で適宜修正する。

A=(abs(X(:,:,1)-X(:,:,2))<50 & abs(X(:,:,2)-X(:,:,3))<50 & X(:,:,2)>120);

imwrite(A,'wbAI.png','png') % 作成する写真に名前を付ける(png写真の場合)

 FreeMatでBingoゲームアプリを作成しました(MATLABでは少し修正が必要です)。

プログラミングの練習問題です。

「ランダムに1~75までの整数(自然数)を表示し、一度出た番号は二度と出ないようにするアルゴリズムを考えよ。」

Bingoアプリ.pdf
PDFファイル 29.2 KB

影を付けて宙に浮かんだように貼り付ける

影を付けて貼り付けるプログラム(FreeMat)
影付き貼り付け.pdf
PDFファイル 41.1 KB

プレゼン用ツール Prezi(無料版)で一年を振り返る。

http://prezi.com/f18prgwtjfyp/?utm_campaign=share&utm_medium=copy

パソコンでfull screenにして→でスライドを進めるとダイナミックに見えます。


mp4はOKですがgifはNGでした。無料版の作成コンテンツは全て公開になります。ゼミの学生さんが研究発表大会で自主的にこれを使ってプレゼンしたので私もやってみました。使い方はこちらにあります。
https://prezi.com/qf7ld288r5om/prezi/ 

アンドロイドロボットで話題の夏目漱石の写真を動画にする

FreeMat Programming
夏目漱石の横顔は?
Soseki.pdf
PDFファイル 244.4 KB

貼り付けてgif動画にしました。

jpg写真を http://www.bannerkoubou.com/anime/ でgifにしました。

 ※シャバーニサンプル画像は商用利用不可です。

まず、上のような白黒画像を用意します。画素の数値は白いほど大きく、黒いほど小さくなっています。縦横の座標の値とこの数値で3次元データとして、それをいろんな角度から正射影して、その位置に元のゴリラの写真の画素値を入れることで、複数枚の平面画像(写真)を作成します。それをMovieMakerで動画に変換したのがイケメンゴリラの動画です。

パノラマ写真をスライドショーにする(FreeMat)

X=imread('C:\FreeMat\9_5_EnlargeMov\Rurikei000.jpg');
CPy=size(X,1)/2; CPx=size(X,2)/2; kkk=0;
Wy=size(X,1)/2; Wx=size(X,2)/2; Par=1.0;

for k=1:70
    if k<=58
    Par=Par*0.98; CPy=CPy-10; CPx=CPx-10;
    STy=CPy-Wy*Par; ENy=CPy+Wy*Par; STx=CPx-Wx*Par; ENx=CPx+Wx*Par;
    else
    CPx=CPx+200; STy=CPy-Wy*Par; ENy=CPy+Wy*Par; STx=CPx-Wx*Par;
    ENx=CPx+Wx*Par;
    end
STy=ceil(STy); ENy=ceil(ENy); STx=ceil(STx); ENx=ceil(ENx);
XX=X(STy:ENy,STx:ENx,:);
kkk=kkk+1
LabelA=[char('Ruri'), num2str(kkk,'%02d'),char('.jpg')];
Imf=fullfile('C:\FreeMat\9_5_EnlargeMov\',LabelA);
imwrite(XX,Imf);
end

MyColorMapで色を変えたgif動画

% MyColormapRep.m これで作成したjpgをgif動画に変換しました。

% FreeMatでは path を記入する。
XX=imread('IMG_20151026_151945.jpg');
XX=1-double(XX)./255; YY=XX; i=0; XX(:,:,:)=XX(:,:,:).^1.5;
for k=5:0.1:20
YY(:,:,:)=(cos(XX(:,:,:)*k*pi)+1)/6+XX(:,:,:).*(2/3);
YY(:,:,3)=zeros(size(YY(:,:,3))); i=i+1;
LabelA=[char('御堂筋'), num2str(i,'%04d'),char('.jpg')];
imwrite(YY,LabelA);
end

福沢諭吉を樋口一葉に変身! (MATLAB)    FreeMatでは修正が必要です。

% FixSizeB.m  (MATLAB)   写真を切り取り,サイズと位置を合わせる。

% ただし、位置はクリックする2箇所のみ。

A=1.0;
XX=imread('C:\Users\ichihashi\Desktop\FukuHigu\Fuku24.png');
% 福沢諭吉 樋口一葉 jpeg写真の読み込み
XX=double(XX)./255; image(XX);  Sz=size(XX);
Z1 =[342   205]; Z2 =[258   259]; % 事前に実行してコマンドウインドウに出た値
    X1=Z1(1)+round((Z1(1)-Z2(1))*A); X2=Z2(1)-round((Z1(1)-Z2(1))*A); % 広げる
    Y1=Z1(2)-round((Z2(2)-Z1(2))*A); Y2=Z2(2)+round((Z2(2)-Z1(2))*A); % 広げる
CutA=zeros(Y2-Y1+1,X1-X2+1,3); SzA=size(CutA);
[Z]=ginput(1); Z1=round(Z) % 範囲の右上の座標
[Z]=ginput(1); Z2=round(Z) % 範囲の左下の座標
    X1=Z1(1)+round((Z1(1)-Z2(1))*A); X2=Z2(1)-round((Z1(1)-Z2(1))*A); % 広げる
    Y1=Z1(2)-round((Z2(2)-Z1(2))*A); Y2=Z2(2)+round((Z2(2)-Z1(2))*A); % 広げる
CutB=XX(Y1:Y2,X2:X1,:); SzB=size(CutB);
CutC=zeros(SzB(1),SzA(2),3); SzC=size(CutC);
for i=1:SzA(2)
    ii=ceil(i*SzB(2)/SzA(2)); CutC(:,i,:)=CutB(:,ii,:);
end
for i=1:SzA(1)
    ii=ceil(i*SzB(1)/SzA(1)); CutA(i,:,:)=CutC(ii,:,:);
end
image(CutA)
imwrite(CutA,'C:\Users\ichihashi\Desktop\FukuHigu\FukuHigu04.png');

文字のダンス

Dancing.gif 文字のダンス (FreeMat, MATLAB)

% 作成したjpg写真を http://www.bannerkoubou.com/anime/ でgifにしました。

% DanceChara.m   
W=50; XX=imread('C:\FreeMat\9_1_MovChara\Shak.png');

XX=double(XX)./255; YY=zeros(size(XX));
for kkk=1:7
for i=1:size(XX,1)
for j=1:size(XX,2)
b=i/size(XX,2)*W+(kkk-1)*1; % b=j/size(XX,2)*W+(kkk-1)*1;
y1=round(sin(b)*20); y2=j+y1;
if y2>size(XX,2) y2=size(XX,2); end; if y2<=0 y2=1; end
YY(i,j,:)=XX(i,y2,:);
end
end
LabelA=[char('C:\FreeMat\9_1_MovChara\Shak2'), num2str(kkk,'%03d'),char('.jpg')];
imwrite(YY,LabelA);
end