化学データ

ChemicalData["Properties"]

caffeine=ChemicalData["Caffeine"]

caffeineSMILES=ChemicalData["Caffeine","SMILES"]

s=ImportString[caffeineSMILES,"SMILES"]

First["EdgeRules"/.s]

caffeinePlot=ChemicalData["Caffeine","MoleculePlot"]

caffeineMoleculerPlot=ChemicalData["Caffeine","SpaceFillingMoleculePlot"]

計算途中の結果をファイルに保存する方法

SetDirectory[NotebookDirectory[]];

DumpSave["caffeine.mx",{caffeine,caffeineMoleculerPlot,caffeinePlot,caffeineSMILES}];

Remove["Global`*"]

Import["caffeine.mx"]

画像処理

画像処理チュートリアル

画像の処理と解析

画像のフィルタリングと近傍処理

mo1=;

EdgeDetect[mo1]

mo2=;

EdgeDetect[mo2]

グラフ

グラフとネットワーク

maze = ;

maze//FullForm;

path=FindShortestPath[maze,"in","out"]

highlightMazePath[maze_,path_]:=Show[{Graphics[{GrayLevel[0.2],Rectangle[{-1.,-1.},{30.,20.}]}],maze,Graph[path,EdgeList[PathGraph[path]],VertexCoordinates->AbsoluteOptions[maze,VertexCoordinates][[2,VertexIndex[maze,#]&/@path]],VertexSize->0,EdgeStyle->Directive[Thickness[0.01],Red,Opacity[1],CapForm["Round"]]]},ImageSize->500]

highlightMazePath[maze,path]

検出するエッジのスケールを指定する：

EdgeDetect[,1]

二重閾値を使った画像のバイナリ化：

MorphologicalBinarize[,{0.65,0.9}]

特徴点を，そのスケール，方向，コントラストを使って可視化する：

img=;
points=ImageKeypoints[img,{"Position","Scale","Orientation","ContrastSign"}];
Show[img,Graphics[Table[{{If[p[[4]]==1,Yellow,Red],Circle[p[[1]],p[[2]]*2.5],Line[{p[[1]],p[[1]]+p[[2]]*2.5*{Cos[p[[3]]],Sin[p[[3]]]}}]}},{p,points}]]]

月の2つの画像のマッチする点を求め，可視化する：

images={ ,};
matches=ImageCorrespondingPoints@@images;
MapThread[Show[#1,Graphics[{Yellow,MapIndexed[Inset[#2[[1]],#1]& ,#2]}]]&,{images,matches}]

消失点を可視化する：

img=;
lines=ImageLines[EdgeDetect[img],.28,.06];
Show[img,Graphics[{Thick,Red,Line/@lines}]]

勾配の大きさのマップ上の線分を検出する：

image=;
lines=ImageLines[ImageAdjust@GradientFilter[image,3,"NonMaxSuppression"->True],.09,"Segmented"->True];
Show[image,Graphics[{Thick,Yellow,Line/@lines}]]

エッジ検出を使って幅のある線を見付ける：

img=;
lines=ImageLines[EdgeDetect[img,13],.18];
Show[img,Graphics[{Thick,Red,Line/@lines}]]

画像のゼロ交差と第1導関数の積を使って向上させたエッジ検出：

ImageMultiply[CrossingDetect[LaplacianGaussianFilter[#,8]], GradientFilter[#,8]]& [] // ImageAdjust

実数値画像の0とゼロ交差を求める：

ContourDetect[]

指定された閾値より下の値を求める：

ContourDetect[,0.25]

標高ラスタの輪郭を求める：

ContourDetect[ImageSubtract[,0.25]]

二次導関数のゼロ輪郭を検出することで画像中の平らな部分を求める：

ContourDetect[LaplacianGaussianFilter[,1],0.08]

前面オブジェクトの境界を求める：

MorphologicalPerimeter[]

強度の閾値を指定する：

MorphologicalPerimeter[, 0.25]

MorphologicalTransform

例  (6)

各画素を各3×3近傍の最大値で置換する：

MorphologicalTransform[,Max]

事実上孤立した前景画素を見付ける規則を使う：

MorphologicalTransform[, 65536]

一連の操作を使って形態的な開きを作る：

MorphologicalTransform[, {"Min","Max"}]

水平の上界を求める：

MorphologicalTransform[, # /.(({{0, 0, 0}, {1, 1, 1}, {1, 1, 1}}))-> 1 &]

名前付きの規則を使う：

MorphologicalTransform[,"EndPoints"]

画像の断片の厳密な位置を求める：

ImageFilter[Boole[# ==ImageData[]]&, , 9]

中央値偏差フィルタ：

ImageFilter[MedianDeviation[Flatten[#]]&,,2]// ImageAdjust

脳腫瘍をハイライトしたMRI画像分割：

ColorCombine[{ RegionBinarize[#,, .06],#}]& []

スケルトンを刈り込むことで形を単純にする：

Pruning[SkeletonTransform[],30]

バイナリ画像中の連結要素を求める：

MorphologicalComponents[]// Colorize

画像中の接続された各要素中の画素数を数える：

Tally[Flatten[MorphologicalComponents[]]]

円に最も近いオブジェクトから4つ目までを選ぶ：

SelectComponents[,"FilledCircularity",-4]

500画素より小さく穴があって画像の境界に接していないオブジェクトを求める：

m=MorphologicalComponents[Binarize[,{0,.7}]];
SelectComponents[m,{"Count","AdjacentBorderCount","Holes"},#1<500&&#2==0&&#3> 0&]//Colorize

カレンダー画像の中から数字に属す部分を抽出する：

m = MorphologicalComponents[BottomHatTransform[,8],.1];
SelectComponents[m,"Width",#>5&]//Colorize

最長成分を選ぶことで衛星画像中の川を求める：

c=ImageForestingComponents[];
SelectComponents[c,"Length",-1]//Image

シードの集合を使って画像を分割する：

ImageForestingComponents[,{{84,102},{56,104},{14,99},{4,99}}]//Colorize

Dilationは小さめの暗い部分の膨張処理を行う：

Dilation[,1]

写真の亀裂を修正する：

Inpaint[, ]

修復でタイムスタンプを除く：

im = ;
Inpaint[im,Dilation[Binarize[ColorSeparate[im][[1]],0.93],1]]

修復でごま塩ノイズを除く：

removeSP[img_] :=Inpaint[img, ImageAdd[MaxDetect[img],MinDetect[img]],Method->"Diffusion"];
removeSP[]

修復によって画像から大きいオブジェクトを除くことができる：

Inpaint[,]

幾何変換で作った画像の境界を修復する：

i=;
pts={{55,133},{216,118},{58,30},{185,32}};
pts2=pts;pts2[[1;;-1;;2,2]]=pts2[[2;;-1;;2,2]];
t=FindGeometricTransform[pts2,pts][[2]];
xform=ImagePerspectiveTransformation[i,t,DataRange->Full]

Inpaint[xform,Binarize[xform,{0,0}],Method->{"TextureSynthesis","NeighborCount"->60,"MaxSamples"->600}]

テクスチャ合成：

texture=;
canvas=ImageCrop[texture,{300,250},{Left,Top}];
region=Binarize[canvas,{0,0}];
Inpaint[canvas,region,Method->{"TextureSynthesis","MaxSamples"->50}]

鎌形セルを見付ける：

m = MorphologicalComponents[,.3];
ComponentMeasurements[ m ,"Elongation", #>0.5&]

完全で重なり合っていないセルを選ぶ：

i=;
SelectComponents[Binarize[i,{0,.7}],{"AdjacentBorderCount","Area"},#1==0&&50<#2<1500&]

選んだセルの境界を示す円を示す：

Show[i,Graphics[{Red,Thick,Circle[#[[1]],#[[2]]]&/@ComponentMeasurements[ImageMultiply[i,%],{"Centroid","EquivalentDiskRadius"}][[All,2]]}]]

バイナリ画像で画像の境界に接する成分を削除する：

DeleteBorderComponents[]

カラー画像とグレースケールの画像を掛け合せる：

ImageMultiply[,]

閾値のバージョンを加えることで，画像をマスクする：

ImageAdd[ ,]

すべてのチャンネルに一定量を加えてカラー画像を明るくする：

ImageAdd[,0.15]

2つのカラー画像を加える：

ImageAdd[,]

カラー写真からバイナリマスクを引く：

ImageSubtract[ ,]

各カラーチャンネルから一定量を引くと画像が暗くなる：

ImageSubtract[,0.4]

ぼやけたバージョンを引くことでシャープではなくするマスクを作る：

ImageSubtract[#,MedianFilter[#,10]]& @

シャープではなくするマスクをもとの画像に加える：

ImageAdd[,%]

重ね合せの明示的な位置を指定する：

ImageCompose[, ,{Left,30},{Left,Bottom}]

地図作製用の地図の連結グラフを計算する：

m = MaxFilter[MorphologicalComponents[],2];
Graph[ComponentMeasurements[m,"Label"][[All,1]],DeleteDuplicates[Sort/@Flatten[ComponentMeasurements[m,"Neighbors"] /.(i_ -> {l___}):> (i\[UndirectedEdge]#& /@ {l})]],VertexCoordinates->ComponentMeasurements[m,"Centroid"],VertexSize->1]

The 10 most traversed stations — along the shortest paths — of the London Underground:

london=;

highlightedStation[vsf_][coords_,v_,whDummy_]:=With[{orig=vsf[coords,v,whDummy],δ=2 π/10},With[{r=3.5 First@Cases[orig,Style[Disk[_,r_],_]:>r]},Join[orig,{AbsoluteThickness[3],Red,CapForm["Butt"],Circle[coords,0.75 r]},Table[Circle[coords,r,{ϕ δ,(ϕ+1) δ}],{ϕ,0,Round[2 π/δ]-1,2}]]]]

HighlightSubway[g0_,vertices_List]:=Module[{g=g0},Do[PropertyValue[{g,v},VertexShapeFunction]=highlightedStation[PropertyValue[{g,v},VertexShapeFunction]],{v,vertices}];
g]

HighlightSubway[london,First/@SortBy[Thread[VertexList[london]->BetweennessCentrality[london]],Last][[-10;;]]]