Ответ 1
Я разработал простой подход, который может вам помочь. Он просто удаляет границы листа слева направо и справа налево.
Единственным следствием является ориентация листа. Я повернул ваше выходное изображение вручную. Тем не менее, я думаю, что вы должны рассмотреть листья в этой позиции для лучшего анализа.
leaf_rotated.jpg:
(источник: sourceforge.net)
leaf_rotated_out.jpg:
(источник: sourceforge.net)
КОД ИСТОЧНИКА:
public class LeafTest {
public static void main(String[] args) {
MarvinImage image = MarvinImageIO.loadImage("./res/leaf_rotated.jpg");
removeBorder(image);
MarvinImageIO.saveImage(image, "./res/leaf_rotated_out.jpg");
}
private static void removeBorder(MarvinImage image){
// left to right
for(int y=0; y<image.getHeight(); y++){
for(int x=0; x<image.getWidth(); x++){
if(image.getIntComponent0(x, y) > 10){
for(int x2=x; x2<image.getWidth() && x2 < x+40; x2++){
image.setIntColor(x2, y, 0,0,0);
}
x=0;
break;
}
}
}
// right to left
for(int y=0; y<image.getHeight(); y++){
for(int x=image.getWidth()-1; x>=0; x--){
if(image.getIntComponent0(x, y) > 10){
for(int x2=x; x2>=0 && x2 > x-40; x2--){
image.setIntColor(x2, y, 0,0,0);
}
x=image.getWidth()-1;
break;
}
}
}
}
}