こんにちは、私はJavaの画像処理技術の幼児です。画像処理で1つのプロジェクトを開発することに決めたので、従うアルゴリズムと、開発が簡単なプロジェクトが必要です。私...そして、JavaまたはMatlabの画像処理に最適なテクノロジーはどれですか? 教えて...
5 に答える
JAVA での画像セグメンテーションには、オープンソースの IMMI ツール (http://spl.utko.feec.vutbr.cz/en/) の使用も検討できます。Matlab と比較すると、(私の意見では) より使いやすく、画像マイニングも簡単に実行できます。
最適な画像処理ツールは、取り組んでいるプロジェクトの種類によって異なると思います。
生産性、迅速な検証、およびレポートの作成が必要な研究プロジェクトに取り組んでいる場合は、Matlabおよび同様のツールが最適なオプションです。一方、ソフトウェア製品を開発している場合は、Java、C++、C、Objective-C などがより適しています。Matlab ソリューションは、本番環境で提供および保守するのは容易ではありません。
Java で画像セグメンテーションを行う方法を尋ねられたので、Java とMarvin Image Processing Frameworkを使用した例を提供します。@Asif Sharif が示唆するように、FloodFill セグメンテーションは優れた戦略であり、私はそれを使用しました!
使い方:
- 入力画像を読み込みます。
- 緑のピクセルを白のピクセルに変更します。
- 背景から前景を分離するために強度のしきい値を適用します。
- モルフォロジー クロージングを適用して、同じオブジェクトの分離された部分をグループ化する
- FloodFill セグメンテーションを使用してセグメントを取得します。
- 元の画像にセグメント座標を描画します。
ソース:
import static marvin.MarvinPluginCollection.*;
public class SimpleSegmentation {
public SimpleSegmentation(){
// 1. Load image
MarvinImage original = MarvinImageIO.loadImage("./res/robocup.jpg");
MarvinImage image = original.clone();
// 2. Change green pixels to white
filterGreen(image);
// 3. Use threshold to separate foreground and background.
MarvinImage bin = MarvinColorModelConverter.rgbToBinary(image, 127);
// 4. Morphological closing to group separated parts of the same object
morphologicalClosing(bin.clone(), bin, MarvinMath.getTrueMatrix(30, 30));
// 5. Use Floodfill segmention to get image segments
image = MarvinColorModelConverter.binaryToRgb(bin);
MarvinSegment[] segments = floodfillSegmentation(image);
// 6. Show the segments in the original image
for(int i=1; i<segments.length; i++){
MarvinSegment seg = segments[i];
original.drawRect(seg.x1, seg.y1, seg.width, seg.height, Color.yellow);
original.drawRect(seg.x1+1, seg.y1+1, seg.width, seg.height, Color.yellow);
}
MarvinImageIO.saveImage(original, "./res/robocup_segmented.png");
}
private void filterGreen(MarvinImage image){
int r,g,b;
for(int y=0; y<image.getHeight(); y++){
for(int x=0; x<image.getWidth(); x++){
r = image.getIntComponent0(x, y);
g = image.getIntComponent1(x, y);
b = image.getIntComponent2(x, y);
if(g > r*1.5 && g > b*1.5){
image.setIntColor(x, y, 255,255,255);
}}}
}
public static void main(String[] args) { new SimpleSegmentation(); }
}
Java Advanced Imaging (JAI)ライブラリを使用して、Java で画像処理を行うことができます。Java と MATLAB のどちらが適しているかは、自分で判断する必要があります。
MATLAB は画像処理に優れています。最善の方法は、特別な画像処理ツール (またはライブラリ) を見つけることです。