Isabelle Bloch

465 papers A* 5A 11B 27C 30Misc 8Journal 185Unranked 190
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Yann Munro, Isabelle Bloch, Marie-Jeanne Lesot
2026 A* conf
CHI
Nour Karoui, Isabelle Bloch, Ignacio Avellino
2025 J jnl
Digit. Appl. Archaeol. Cult. Heritage
Ege Sendogan, Victoria Eyharabide, Béatrice Caseau, Isabelle Bloch
2025 conf
ICIAP (2)
Aravindan Arun Nadaradjane, Julie Lerond, Mehdi Touat, Franck Bielle, Isabelle Bloch
2025 J jnl
Multim. Tools Appl.
Mohamed Salim Aissi, Marina Giardinetti, Isabelle Bloch, Julien Schuh, Daniel Foliard
2025 conf
MICCAI (7)
Elodie Ripaud, Clément Jailin, Pablo Milioni de Carvalho, Laurence Vancamberg, Isabelle Bloch
2025 J jnl
Multim. Tools Appl.
Ege Sendogan, Victoria Eyharabide, Isabelle Bloch
2025 Misc conf
ICIAP
Ege Sendogan, Victoria Eyharabide, Isabelle Bloch
2025 conf
FUZZ
Isabelle Bloch, Enzo Bonnot, Pietro Gori, Giammarco La Barbera, Sabine Sarnacki
2025 J jnl
CoRR
Isabelle Bloch, Enzo Bonnot, Pietro Gori, Giammarco La Barbera, Sabine Sarnacki
2025 conf
DGMM
Paul Lascabettes, Nils Quaetaert, Moreno Andreatta, Isabelle Bloch
2025 conf
ISBI
Emma Sarfati, Alexandre Bône, Marc-Michel Rohé, C. Aubé, M. Ronot, Pietro Gori, Isabelle Bloch
2025 J jnl
CoRR
Emma Sarfati, Alexandre Bône, Marc-Michel Rohé, C. Aubé, M. Ronot, Pietro Gori, Isabelle Bloch
2025 conf
ISIC@MICCAI
Giammarco La Barbera, Enzo Bonnot, Thomas Isla, Juan Pablo de la Plata, Joy-Rose Dunoyer de Segonzac, Jennifer Attali, Cécile Lozach, Alexandre Bellucci, Louis Marcellin, Laure Fournier, Sabine Sarnacki, Pietro Gori, Isabelle Bloch
2025 J jnl
CoRR
Giammarco La Barbera, Enzo Bonnot, Thomas Isla, Juan Pablo de la Plata, Joy-Rose Dunoyer de Segonzac, Jennifer Attali, Cécile Lozach, Alexandre Bellucci, Louis Marcellin, Laure Fournier, Sabine Sarnacki, Pietro Gori, Isabelle Bloch
2024 conf
MCM
Gonzalo Romero-García, Carlos Agón, Isabelle Bloch
2024 B conf
PRIMA
Yann Munro, Camilo Sarmiento, Isabelle Bloch, Gauvain Bourgne, Catherine Pelachaud, Marie-Jeanne Lesot
2024 J jnl
CoRR
Yann Munro, Camilo Sarmiento, Isabelle Bloch, Gauvain Bourgne, Catherine Pelachaud, Marie-Jeanne Lesot
2024 J jnl
IEEE Trans. Biomed. Eng.
Florence Rossant, Isabelle Bloch, Iyed Trimeche, J.-B. de Regnault de Bellescize, Daniela Castro Farias, Valerie Krivosic, Hugues Chabriat, Michel Pâques
2024 conf
ISBI
Garance Martin, Aymeric Becq, Isabelle Bloch, Marine Camus, Andrea Pinna, Jérôme Szewczyk
2024 conf
ISBI
Arnaud Quillent, Vincent Jonas Bismuth, Isabelle Bloch, Christophe Kervazo, Saïd Ladjal
2024 conf
DGMM
Paul Lascabettes, Isabelle Bloch
2024 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Gianni Franchi, Andrei Bursuc, Emanuel Aldea, Séverine Dubuisson, Isabelle Bloch
2024 conf
IPMU (3)
Leandro Nascimento, Quentin François, Bertrand Duplat, Sinan Haliyo, Isabelle Bloch
2024 J jnl
CoRR
Lucrezia Tosato, Victor Fortier, Isabelle Bloch, Catherine Pelachaud
2024 J jnl
Pattern Recognit. Lett.
Lucrezia Tosato, Victor Fortier, Isabelle Bloch, Catherine Pelachaud
2024 J jnl
Inf. Sci.
Isabelle Bloch, Alain Bretto
2024 conf
DGMM
Gonzalo Romero-García, Isabelle Bloch, Carlos Agón
2024 J jnl
Pattern Recognit.
Hugo N. Oliveira, Pedro H. T. Gama, Isabelle Bloch, Roberto Marcondes Cesar Jr.
2024 J jnl
IEEE Access
Srikumar Sandeep, Alireza Vard, Mònica Guxens, Isabelle Bloch, Joe Wiart
2024 conf
JIAF-JFPDA
Yann Munro, Isabelle Bloch, Mohamed Chetouani, Catherine Pelachaud, Marie-Jeanne Lesot
2024 J jnl
CoRR
Marc Aiguier, Isabelle Bloch, Romain Pascual
2024 conf
MCM
Paul Lascabettes, Isabelle Bloch
2023 conf
MIDL
Arnaud Quillent, Vincent Jonas Bismuth, Isabelle Bloch, Christophe Kervazo, Saïd Ladjal
2023 J jnl
Logica Universalis
Marc Aiguier, Isabelle Bloch
2023 conf
MILLanD@MICCAI
Camille Ruppli, Pietro Gori, Roberto Ardon, Isabelle Bloch
2023 J jnl
CoRR
Camille Ruppli, Pietro Gori, Roberto Ardon, Isabelle Bloch
2023 conf
EUSFLAT/AGOP
Isabelle Bloch
2023 conf
ISBI
Emma Sarfati, Alexandre Bône, Marc-Michel Rohé, Pietro Gori, Isabelle Bloch
2023 J jnl
CoRR
Emma Sarfati, Alexandre Bône, Marc-Michel Rohé, Pietro Gori, Isabelle Bloch
2023 J jnl
IEEE Trans. Medical Imaging
Yanis Djebra, Thibault Marin, Paul K. Han, Isabelle Bloch, Georges El Fakhri, Chao Ma
2023 J jnl
CoRR
Hugo N. Oliveira, Pedro H. T. Gama, Isabelle Bloch, Roberto Marcondes Cesar Jr.
2023 J jnl
CoRR
Jérémy Chopin, Jean-Baptiste Fasquel, Harold Mouchère, Rozenn Dahyot, Isabelle Bloch
2023 J jnl
Comput. Vis. Image Underst.
Jérémy Chopin, Jean-Baptiste Fasquel, Harold Mouchère, Rozenn Dahyot, Isabelle Bloch
2023 J jnl
CoRR
Marc Aiguier, Isabelle Bloch, Salim Nibouche, Ramón Pino Pérez
2023 J jnl
Int. J. Approx. Reason.
Marc Aiguier, Isabelle Bloch, Salim Nibouche, Ramón Pino Pérez
2023 conf
JIAF
Marc Aiguier, Isabelle Bloch, Salim Nibouche, Ramón Pino Pérez
2023 J jnl
J. Appl. Non Class. Logics
Isabelle Bloch, Jérôme Lang, Ramón Pino Pérez, Carlos Uzcátegui
2023 J jnl
CoRR
Rebeca Vétil, Clément Abi Nader, Alexandre Bône, Marie-Pierre Vullierme, Marc-Michel Rohé, Pietro Gori, Isabelle Bloch
2023 conf
CaPTion@MICCAI
Rebeca Vétil, Clément Abi Nader, Alexandre Bône, Marie-Pierre Vullierme, Marc-Michel Rohé, Pietro Gori, Isabelle Bloch
2023 conf
HIP@ICDAR
Victoria Eyharabide, Laurence Likforman-Sulem, Lucia Maria Orlandi, Alexandre Binoux, Théophile Rageau, Qijia Huang, Attilio Fiandrotti, Béatrice Caseau, Isabelle Bloch
2023 J jnl
NeuroImage
Yanis Chemli, Marc-André Tétrault, Thibault Marin, Marc D. Normandin, Isabelle Bloch, Georges El Fakhri, Jinsong Ouyang, Yoann Petibon
2023 J jnl
CoRR
Yann Munro, Camilo Sarmiento, Isabelle Bloch, Gauvain Bourgne, Marie-Jeanne Lesot
2023 conf
JIAF
Yann Munro, Camilo Sarmiento, Isabelle Bloch, Gauvain Bourgne, Marie-Jeanne Lesot
2023 J jnl
Medical Image Anal.
Giammarco La Barbera, Laurence Rouet, Haithem Boussaid, Alexis Lubet, Rani Kassir, Sabine Sarnacki, Pietro Gori, Isabelle Bloch
2023 conf
MICCAI (1)
Emma Sarfati, Alexandre Bône, Marc-Michel Rohé, Pietro Gori, Isabelle Bloch
2023 J jnl
CoRR
Emma Sarfati, Alexandre Bône, Marc-Michel Rohé, Pietro Gori, Isabelle Bloch
2022 conf
ISBI
Matthis Maillard, François Anton, Joan Glaunès, Isabelle Bloch, Pietro Gori
2022 J jnl
CoRR
Matthis Maillard, François Anton, Joan Glaunès, Isabelle Bloch, Pietro Gori
2022 J jnl
Image Process. Line
Samy Blusseau, Santiago Velasco-Forero, Jesús Angulo, Isabelle Bloch
2022 A conf
BMVC
Giammarco La Barbera, Haithem Boussaid, Francesco Maso, Sabine Sarnacki, Laurence Rouet, Pietro Gori, Isabelle Bloch
2022 J jnl
CoRR
Giammarco La Barbera, Haithem Boussaid, Francesco Maso, Sabine Sarnacki, Laurence Rouet, Pietro Gori, Isabelle Bloch
2022 conf
AIC
Yann Munro, Isabelle Bloch, Mohamed Chetouani, Marie-Jeanne Lesot, Catherine Pelachaud
2022 ed.
BELIEF
Sylvie Le Hégarat-Mascle, Isabelle Bloch, Emanuel Aldea
2022 conf
MCM
Paul Lascabettes, Carlos Agón, Moreno Andreatta, Isabelle Bloch
2022 J jnl
CoRR
Robin Kips, Panagiotis-Alexandros Bokaris, Matthieu Perrot, Pietro Gori, Isabelle Bloch
2022 conf
Image Processing: Algorithms and Systems
Robin Kips, Panagiotis-Alexandros Bokaris, Matthieu Perrot, Pietro Gori, Isabelle Bloch
2022 conf
DGMM
Isabelle Bloch
2022 conf
ICPRAI (1)
Jérémy Chopin, Jean-Baptiste Fasquel, Harold Mouchère, Rozenn Dahyot, Isabelle Bloch
2022 conf
ISBI
Rebeca Vétil, Alexandre Bône, Marie-Pierre Vullierme, Marc-Michel Rohé, Pietro Gori, Isabelle Bloch
2022 conf
MIE
Garance Martin, Saad El-Madafri, Aymeric Becq, Jérôme Szewczyk, Isabelle Bloch
2022 J jnl
Rev. Ouverte Intell. Artif.
Isabelle Bloch, Jérôme Euzenat, Jérôme Lang, François Schwarzentruber
2022 J jnl
Rev. Ouverte Intell. Artif.
Isabelle Bloch, Jérôme Euzenat, Jérôme Lang, François Schwarzentruber
2022 B conf
ICIP
Mateus Riva, Pietro Gori, Florian Yger, Isabelle Bloch
2022 J jnl
CoRR
Mateus Riva, Pietro Gori, Florian Yger, Isabelle Bloch
2022 conf
MICCAI (2)
Rebeca Vétil, Clément Abi Nader, Alexandre Bône, Marie-Pierre Vullierme, Marc-Michel Rohé, Pietro Gori, Isabelle Bloch
2022 J jnl
CoRR
Rebeca Vétil, Clément Abi Nader, Alexandre Bône, Marie-Pierre Vullierme, Marc-Michel Rohé, Pietro Gori, Isabelle Bloch
2022 conf
MCM
Gonzalo Romero-García, Isabelle Bloch, Carlos Agón
2022 conf
DGMM
Samy Blusseau, Santiago Velasco-Forero, Jesús Angulo, Isabelle Bloch
2022 J jnl
IEEE Access
Gianni Franchi, Andrei Bursuc, Emanuel Aldea, Séverine Dubuisson, Isabelle Bloch
2022 conf
MILLanD@MICCAI
Camille Ruppli, Pietro Gori, Roberto Ardon, Isabelle Bloch
2022 J jnl
CoRR
Camille Ruppli, Pietro Gori, Roberto Ardon, Isabelle Bloch
2022 conf
ICPRAI (1)
Jérémy Chopin, Jean-Baptiste Fasquel, Harold Mouchère, Rozenn Dahyot, Isabelle Bloch
2022 J jnl
Comput. Graph. Forum
Robin Kips, Ruowei Jiang, Sileye O. Ba, Brendan Duke, Matthieu Perrot, Pietro Gori, Isabelle Bloch
2022 J jnl
CoRR
Robin Kips, Ruowei Jiang, Sileye O. Ba, Brendan Duke, Matthieu Perrot, Pietro Gori, Isabelle Bloch
2022 conf
ICPRAI (2)
Victor Fortier, Isabelle Bloch, Catherine Pelachaud
2022 conf
BioCAS
Oriane Thiery, Garance Martin, Isabelle Bloch, Martin Dres, Umar Saleem, Andrea Pinna
2022 B conf
FUZZ-IEEE
Isabelle Bloch, Marie-Jeanne Lesot
2022 conf
WBIR
François Anton, Matthis Maillard, Catherine Oppenheim, Johan Pallud, Isabelle Bloch, Pietro Gori, Joan Glaunès
2021 J jnl
CoRR
Mateus Riva, Pietro Gori, Florian Yger, Roberto Marcondes Cesar Junior, Isabelle Bloch
2021 J jnl
Mach. Learn. Knowl. Extr.
Antoine Pirovano, Hippolyte Heuberger, Sylvain Berlemont, Saïd Ladjal, Isabelle Bloch
2021 conf
SIBGRAPI
Hugo N. Oliveira, Larissa de O. Penteado, José Luiz Maciel, Suely Fazio Ferraciolli, Marcelo Straus Takahashi, Isabelle Bloch, Roberto Marcondes Cesar Junior
2021 conf
ISBI
Giammarco La Barbera, Pietro Gori, Haithem Boussaid, Bruno Belucci, Alessandro Delmonte, Jeanne Goulin, Sabine Sarnacki, Laurence Rouet, Isabelle Bloch
2021 J jnl
CoRR
Giammarco La Barbera, Pietro Gori, Haithem Boussaid, Bruno Belucci, Alessandro Delmonte, Jeanne Goulin, Sabine Sarnacki, Laurence Rouet, Isabelle Bloch
2021 J jnl
CoRR
Vincent Couteaux, Mathilde Trintignac, Olivier Nempont, Guillaume Pizaine, Anna Sesilia Vlachomitrou, Pierre-Jean Valette, Laurent Milot, Isabelle Bloch
2021 J jnl
Medical Image Anal.
Antoine Pirovano, Leandro G. Almeida, Saïd Ladjal, Isabelle Bloch, Sylvain Berlemont
2021 conf
ISBI
Vincent Couteaux, Mathilde Trintignac, Olivier Nempont, Guillaume Pizaine, Anna Sesilia Vlachomitrou, Pierre-Jean Valette, Laurent Milot, Isabelle Bloch
2021 conf
CVPR Workshops
Robin Kips, Ruowei Jiang, Sileye O. Ba, Edmund Phung, Parham Aarabi, Pietro Gori, Matthieu Perrot, Isabelle Bloch
2021 J jnl
CoRR
Robin Kips, Ruowei Jiang, Sileye O. Ba, Edmund Phung, Parham Aarabi, Pietro Gori, Matthieu Perrot, Isabelle Bloch
2021 J jnl
CoRR
Minhao Hu, Matthis Maillard, Ya Zhang, Tommaso Ciceri, Giammarco La Barbera, Isabelle Bloch, Pietro Gori
2021 J jnl
Math. Morphol. Theory Appl.
Isabelle Bloch
2021 conf
DGMM
Isabelle Bloch, Samy Blusseau, Ramón Pino Pérez, Élodie Puybareau, Guillaume Tochon
2021 J jnl
CoRR
Mateus Riva, Florian Yger, Pietro Gori, Roberto M. Cesar Jr., Isabelle Bloch
2021 conf
ISBI
Karine Haddadi, Serge Muller, Isabelle Bloch
2020 J jnl
CoRR
Marc Aiguier, Isabelle Bloch, Ramón Pino Pérez
2020 J jnl
Math. Morphol. Theory Appl.
Samy Blusseau, Bastien Ponchon, Santiago Velasco-Forero, Jesús Angulo, Isabelle Bloch
2020 ch.
A Guided Tour of Artificial Intelligence Research (3) (III)
Isabelle Bloch, Régis Clouard, Marinette Revenu, Olivier Sigaud
2020 conf
ECCV Workshops (3)
Robin Kips, Pietro Gori, Matthieu Perrot, Isabelle Bloch
2020 J jnl
CoRR
Robin Kips, Pietro Gori, Matthieu Perrot, Isabelle Bloch
2020 J jnl
J. Digit. Imaging
Alessio Virzì, Cécile Olivia Muller, Jean-Baptiste Marret, Eva Mille, Laureline Berteloot, David Grévent, Nathalie Boddaert, Pietro Gori, Sabine Sarnacki, Isabelle Bloch
2020 ed.
CNIA
Isabelle Bloch
2020 J jnl
CoRR
Gianni Franchi, Andrei Bursuc, Emanuel Aldea, Séverine Dubuisson, Isabelle Bloch
2020 J jnl
CoRR
Valérie Beaudouin, Isabelle Bloch, David Bounie, Stéphan Clémençon, Florence d'Alché-Buc, James Eagan, Winston Maxwell, Pavlo Mozharovskyi, Jayneel Parekh
2020 conf
IPTA
Iyed Trimeche, Florence Rossant, Isabelle Bloch, Michel Pâques
2020 conf
NeHuAI@ECAI
Valérie Beaudouin, Isabelle Bloch, David Bounie, Stéphan Clémençon, Florence d'Alché-Buc, James Eagan, Winston Maxwell, Pavlo Mozharovskyi, Jayneel Parekh
2020 conf
iMIMIC/MIL3ID/LABELS@MICCAI
Antoine Pirovano, Hippolyte Heuberger, Sylvain Berlemont, Saïd Ladjal, Isabelle Bloch
2020 J jnl
CoRR
Antoine Pirovano, Hippolyte Heuberger, Sylvain Berlemont, Saïd Ladjal, Isabelle Bloch
2020 J jnl
CoRR
Qinkai Zheng, Han Qiu, Gérard Memmi, Isabelle Bloch
2020 conf
MICCAI (1)
Minhao Hu, Matthis Maillard, Ya Zhang, Tommaso Ciceri, Giammarco La Barbera, Isabelle Bloch, Pietro Gori
2020 J jnl
CoRR
Gianni Franchi, Andrei Bursuc, Emanuel Aldea, Séverine Dubuisson, Isabelle Bloch
2020 J jnl
Neuroinformatics
Corentin Mercier, Sylvain Rousseau, Pietro Gori, Isabelle Bloch, Tamy Boubekeur
2020 conf
IPTA
Jérémy Chopin, Jean-Baptiste Fasquel, Harold Mouchère, Rozenn Dahyot, Isabelle Bloch
2020 conf
ECCV (17)
Gianni Franchi, Andrei Bursuc, Emanuel Aldea, Séverine Dubuisson, Isabelle Bloch
2020 B conf
ICIP
Gianni Franchi, Emanuel Aldea, Séverine Dubuisson, Isabelle Bloch
2019 conf
DGCI
Isabelle Bloch, Alain Bretto
2019 conf
ISBI
Ruben Sánchez de la Rosa, Ann-Katherine Carton, Pablo Milioni de Carvalho, Isabelle Bloch, Serge Muller
2019 B conf
AVSS
Gianni Franchi, Emanuel Aldea, Séverine Dubuisson, Isabelle Bloch
2019 conf
EMBC
Carlos Tor-Díez, Chi-Hieu Pham, Hélène Meunier, Sylvain Faisan, Isabelle Bloch, Nathalie Bednarek, Nicolas Passat, François Rousseau
2019 C conf
ISMM
Alexandre Goy, Marc Aiguier, Isabelle Bloch
2019 J jnl
J. Appl. Non Class. Logics
Marc Aiguier, Isabelle Bloch
2019 C conf
ISMM
Yunxiang Zhang, Samy Blusseau, Santiago Velasco-Forero, Isabelle Bloch, Jesús Angulo
2019 J jnl
CoRR
Yunxiang Zhang, Samy Blusseau, Santiago Velasco-Forero, Isabelle Bloch, Jesús Angulo
2019 C conf
ISMM
Carlos Tor-Díez, Sylvain Faisan, Loïc Mazo, Nathalie Bednarek, Hélène Meunier, Isabelle Bloch, Nicolas Passat, François Rousseau
2019 C conf
ISMM
Bastien Ponchon, Santiago Velasco-Forero, Samy Blusseau, Jesús Angulo, Isabelle Bloch
2019 J jnl
CoRR
Bastien Ponchon, Santiago Velasco-Forero, Samy Blusseau, Jesús Angulo, Isabelle Bloch
2019 B conf
ICIP
Iyed Trimeche, Florence Rossant, Isabelle Bloch, Michel Pâques
2019 J jnl
CoRR
Gianni Franchi, Andrei Bursuc, Emanuel Aldea, Séverine Dubuisson, Isabelle Bloch
2019 conf
iMIMIC/ML-CDS@MICCAI
Vincent Couteaux, Olivier Nempont, Guillaume Pizaine, Isabelle Bloch
2019 conf
ISBI
Alessandro Delmonte, Corentin Mercier, Johan Pallud, Isabelle Bloch, Pietro Gori
2018 J jnl
Comput. Medical Imaging Graph.
Carlos Tor-Díez, Nicolas Passat, Isabelle Bloch, Sylvain Faisan, Nathalie Bednarek, François Rousseau
2018 J jnl
Artif. Intell.
Marc Aiguier, Jamal Atif, Isabelle Bloch, Céline Hudelot
2018 conf
AIC
Giovanni Sileno, Isabelle Bloch, Jamal Atif, Jean-Louis Dessalles
2018 J jnl
CoRR
Marc Aiguier, Jamal Atif, Isabelle Bloch, Ramón Pino Pérez
2018 J jnl
Int. J. Approx. Reason.
Marc Aiguier, Jamal Atif, Isabelle Bloch, Ramón Pino Pérez
2018 J jnl
CoRR
Isabelle Bloch, Jérôme Lang, Ramón Pino Pérez, Carlos Uzcátegui
2018 Misc conf
ICCS
Carlos Agón, Moreno Andreatta, Jamal Atif, Isabelle Bloch, Pierre Mascarade
2018 conf
ISBI
Ruben Sánchez de la Rosa, Ann-Katherine Carton, Pablo Milioni de Carvalho, Z. Li, Serge Muller, Isabelle Bloch
2018 conf
VCBM@MICCAI
Corentin Mercier, Pietro Gori, Damien Rohmer, Marie-Paule Cani, Tamy Boubekeur, Jean-Marc Thiery, Isabelle Bloch
2018 conf
DATRA/PIPPI@MICCAI
Alessio Virzì, Pietro Gori, Cécile Olivia Muller, Eva Mille, Q. Peyrot, Laureline Berteloot, Nathalie Boddaert, Sabine Sarnacki, Isabelle Bloch
2018 J jnl
Medical Image Anal.
Yongchao Xu, Baptiste Morel, Sonia Dahdouh, Élodie Puybareau, Alessio Virzi, Hélène Urien, Thierry Géraud, Catherine Adamsbaum, Isabelle Bloch
2018 B conf
ICIP
Samy Blusseau, Santiago Velasco-Forero, Jesús Angulo, Isabelle Bloch
2018 J jnl
Pattern Anal. Appl.
Abdalbassir Abou-Elailah, Isabelle Bloch, Valérie Gouet-Brunet
2017 conf
ISBI
Alessio Virzi, Jean-Baptiste Marret, Cécile Olivia Muller, Laureline Berteloot, Nathalie Boddaert, Sabine Sarnacki, Isabelle Bloch
2017 C conf
ISMM
Hélène Urien, Irène Buvat, Nicolas Rougon, Michaël Soussan, Isabelle Bloch
2017 J jnl
CoRR
Hadrien Bertrand, Matthieu Perrot, Roberto Ardon, Isabelle Bloch
2017 conf
ISBI
Hadrien Bertrand, Matthieu Perrot, Roberto Ardon, Isabelle Bloch
2017 J jnl
CoRR
Marc Aiguier, Isabelle Bloch
2017 J jnl
Comput. Vis. Image Underst.
Henrique Morimitsu, Isabelle Bloch, Roberto Marcondes Cesar Junior
2017 B conf
ICIP
Yongchao Xu, Thierry Géraud, Isabelle Bloch
2017 C conf
ISMM
Isabelle Bloch
2017 J jnl
Rev. d'Intelligence Artif.
Yifan Yang, Jamal Atif, Isabelle Bloch
2017 conf
ISBI
Timothée Evain, Xavier Ripoche, Jamal Atif, Isabelle Bloch
2017 Misc conf
KI
Giovanni Sileno, Isabelle Bloch, Jamal Atif, Jean-Louis Dessalles
2017 J jnl
Biomed. Signal Process. Control.
Yuan Yang, Sylvain Chevallier, Joe Wiart, Isabelle Bloch
2017 C conf
ISMM
Isabelle Bloch
2017 conf
BrainLes@MICCAI
Yongchao Xu, Thierry Géraud, Élodie Puybareau, Isabelle Bloch, Joseph Chazalon
2016 conf
ISBI
Hélène Urien, Irène Buvat, Nicolas Rougon, Sarah Boughdad, Isabelle Bloch
2016 conf
EMBC
Baptiste Morel, Yongchao Xu, Alessio Virzi, Thierry Géraud, Catherine Adamsbaum, Isabelle Bloch
2016 J jnl
Medical Image Anal.
Paolo Irrera, Isabelle Bloch, Maurice Delplanque
2016 J jnl
Pattern Recognit. Lett.
Nicolas Lermé, Florence Rossant, Isabelle Bloch, Michel Pâques, Edouard Koch, Jonathan Benesty
2016 J jnl
Comput. Vis. Image Underst.
David Lesage, Elsa D. Angelini, Gareth Funka-Lea, Isabelle Bloch
2016 J jnl
Math. Morphol. Theory Appl.
Isabelle Bloch, Jamal Atif
2016 A conf
ECAI
Yifan Yang, Ricardo de Aldama, Jamal Atif, Isabelle Bloch
2016 J jnl
CoRR
Henrique Morimitsu, Isabelle Bloch, Roberto Marcondes Cesar Jr.
2016 J jnl
Fuzzy Sets Syst.
Maria Carolina Vanegas, Isabelle Bloch, Jordi Inglada
2016 conf
IPTA
Marthe Lagarrigue-Charbonnier, Florence Rossant, Isabelle Bloch, Marie-Helene Errera, Michel Pâques
2016 J jnl
Int. J. Uncertain. Fuzziness Knowl. Based Syst.
Jamal Atif, Isabelle Bloch, Céline Hudelot
2016 J jnl
Cogn. Comput.
Yuan Yang, Isabelle Bloch, Sylvain Chevallier, Joe Wiart
2015 conf
MICCAI (2)
Paolo Irrera, Isabelle Bloch, Maurice Delplanque
2015 Misc conf
KI
Yifan Yang, Jamal Atif, Isabelle Bloch
2015 conf
ICCV Workshops
Henrique Morimitsu, Roberto M. Cesar, Isabelle Bloch
2015 J jnl
CoRR
Marc Aiguier, Jamal Atif, Isabelle Bloch, Céline Hudelot
2015 J jnl
Comput. Vis. Image Underst.
Isabelle Bloch, Alain Bretto
2015 conf
ICPRAM (Selected Papers)
Abdalbassir Abou-Elailah, Valérie Gouet-Brunet, Isabelle Bloch
2015 conf
ICPRAM (1)
Abdalbassir Abou-Elailah, Valérie Gouet-Brunet, Isabelle Bloch
2015 J jnl
Rev. d'Intelligence Artif.
Isabelle Bloch, Jamal Atif
2015 conf
ICIAP (1)
Timothée Evain, Xavier Ripoche, Jamal Atif, Isabelle Bloch
2015 J jnl
Fuzzy Sets Syst.
Isabelle Bloch
2015 conf
ICIAR
Yu-Ke Li, Isabelle Bloch, Weiming Shen
2015 C conf
ISMM
Isabelle Bloch, Jamal Atif
2015 conf
MICCAI (3)
Romane Gauriau, David Lesage, Mélanie Chiaradia, Baptiste Morel, Isabelle Bloch
2015 J jnl
Medical Image Anal.
Romane Gauriau, Rémi Cuingnet, David Lesage, Isabelle Bloch
2015 conf
ISBI
Romane Gauriau, Roberto Ardori, David Lesage, Isabelle Bloch
2015 J jnl
Pattern Recognit.
Florence Rossant, Isabelle Bloch, Itebeddine Ghorbel, Michel Pâques
2015 conf
FLinAI@IJCAI
Anca L. Ralescu, Isabelle Bloch, Roberto M. Cesar
2015 J jnl
CoRR
Marc Aiguier, Jamal Atif, Isabelle Bloch, Céline Hudelot
2015 J jnl
Discret. Appl. Math.
Isabelle Bloch, Alain Bretto, Aurélie Leborgne
2015 J jnl
EURASIP J. Image Video Process.
Ujjwal Verma, Florence Rossant, Isabelle Bloch
2015 J jnl
Medical Image Anal.
Sonia Dahdouh, Elsa D. Angelini, Gilles Grange, Isabelle Bloch
2015 B conf
Image Processing
Sonia Dahdouh, Isabelle Bloch
2015 J jnl
CoRR
Marc Aiguier, Jamal Atif, Isabelle Bloch, Céline Hudelot
2014 conf
VISAPP (3)
Catherine Herold, Vincent Despiegel, Stéphane Gentric, Séverine Dubuisson, Isabelle Bloch
2014 conf
ICIAR (2)
Henrique Morimitsu, Roberto Marcondes Cesar Jr., Isabelle Bloch
2014 conf
ECCV Workshops (2)
Céline Hudelot, Jamal Atif, Isabelle Bloch
2014 A conf
ECAI
Felix Distel, Jamal Atif, Isabelle Bloch
2014 A* conf
KR
Felix Distel, Jamal Atif, Isabelle Bloch
2014 conf
ISBI
Paolo Irrera, Isabelle Bloch, Maurice Delplanque
2014 conf
ICIAR (2)
Nicolas Lermé, Florence Rossant, Isabelle Bloch, Michel Pâques, Edouard Koch
2014 J jnl
Int. J. Approx. Reason.
Arnaud Roquel, Sylvie Le Hégarat-Mascle, Isabelle Bloch, Bastien Vincke
2014 B conf
ICIP
Denis H. P. Salvadeo, Isabelle Bloch, Florence Tupin, Nelson D. A. Mascarenhas, Alexandre L. M. Levada, Charles-Alban Deledalle, Sonia Dahdouh
2014 J jnl
Pattern Recognit.
Giovanni Palma, Isabelle Bloch, Serge Muller
2014 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Jamal Atif, Céline Hudelot, Isabelle Bloch
2014 conf
MICCAI (3)
Romane Gauriau, Rémi Cuingnet, David Lesage, Isabelle Bloch
2014 B conf
ICIP
Vincent Israel-Jost, Jérôme Darbon, Elsa D. Angelini, Isabelle Bloch
2014 J jnl
Comput. Vis. Image Underst.
Catherine Herold, Vincent Despiegel, Stéphane Gentric, Séverine Dubuisson, Isabelle Bloch
2014 B conf
ICPR
Nicolas Lermé, Florence Rossant, Isabelle Bloch, Michel Pâques, Edouard Koch
2014 conf
ICPRAM (Selected Papers)
Ujjwal Verma, Florence Rossant, Isabelle Bloch, Julien Orensanz, Denis Boisgontier
2014 C conf
ICPRAM
Ujjwal Verma, Florence Rossant, Isabelle Bloch, Julien Orensanz, Denis Boisgontier
2014 J jnl
EURASIP J. Adv. Signal Process.
Yuan Yang, Sylvain Chevallier, Joe Wiart, Isabelle Bloch
2014 C conf
ICPRAM
Ana B. Graciano Fouquier, Séverine Dubuisson, Isabelle Bloch, Anja Klöckner
2013 conf
Abdominal Imaging
Romane Gauriau, Rémi Cuingnet, Raphael Prevost, Benoit Mory, Roberto Ardon, David Lesage, Isabelle Bloch
2013 J jnl
Inf. Sci.
Olivier Nempont, Jamal Atif, Isabelle Bloch
2013 conf
ISBI
Paolo Irrera, Isabelle Bloch, Maurice Delplanque
2013 conf
EUSFLAT Conf.
Jamal Atif, Isabelle Bloch, Felix Distel, Céline Hudelot
2013 J jnl
IEEE Trans. Geosci. Remote. Sens.
Maria Carolina Vanegas, Isabelle Bloch, Jordi Inglada
2013 J jnl
IEEE Trans. Biomed. Eng.
Jérémie Anquez, Elsa D. Angelini, Gilles Grange, Isabelle Bloch
2013 J jnl
Comput. Vis. Image Underst.
Vincent Israel-Jost, Jérôme Darbon, Elsa D. Angelini, Isabelle Bloch
2013 conf
ICIAP (2)
Olexiy Kyrgyzov, Isabelle Bloch, Yuan Yang, Joe Wiart, Antoine Souloumiac
2013 conf
EUSFLAT Conf.
Isabelle Bloch, Jamal Atif
2013 conf
On Fuzziness (1)
Isabelle Bloch
2013 C conf
ICFCA
Jamal Atif, Isabelle Bloch, Felix Distel, Céline Hudelot
2013 J jnl
Comput. Vis. Image Underst.
Isabelle Bloch, Alain Bretto
2013 conf
WILF
Isabelle Bloch
2013 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Nicolas Chenouard, Isabelle Bloch, Jean-Christophe Olivo-Marin
2013 J jnl
Int. J. Pattern Recognit. Artif. Intell.
Isabelle Bloch, Roberto Marcondes Cesar Jr.
2013 conf
ISBI
Sonia Dahdouh, Antoine Serrurier, Gilles Grange, Elsa D. Angelini, Isabelle Bloch
2013 C conf
ISMM
Isabelle Bloch, Alain Bretto, Aurélie Leborgne
2013 Misc conf
ICASSP
Yuan Yang, Olexiy Kyrgyzov, Joe Wiart, Isabelle Bloch
2012 conf
Belief Functions
Arnaud Roquel, Sylvie Le Hégarat-Mascle, Isabelle Bloch, Bastien Vincke
2012 conf
ICIAR (2)
Kevin Loquin, Isabelle Bloch, Kiyoko Nakashima, Florence Rossant, Pierre-Yves Boëlle, Michel Pâques
2012 B conf
ESANN
Yuan Yang, Sylvain Chevallier, Joe Wiart, Isabelle Bloch
2012 C conf
IGARSS
Nada Milisavljevic, Francesco Holecz, Isabelle Bloch, Damien Closson, Francesco Collivignarelli
2012 J jnl
Comput. Vis. Image Underst.
Erkut Erdem, Séverine Dubuisson, Isabelle Bloch
2012 J jnl
Comput. Vis. Image Underst.
Nicolas Widynski, Séverine Dubuisson, Isabelle Bloch
2012 conf
VISAPP (2)
Catherine Herold, Vincent Despiegel, Stéphane Gentric, Séverine Dubuisson, Isabelle Bloch
2012 J jnl
Pattern Recognit.
Alexandre Noma, Ana Beatriz Vicentim Graciano, Roberto Marcondes Cesar Jr., Luís Augusto Consularo, Isabelle Bloch
2012 J jnl
Synth.
Marco Aiello, Guram Bezhanishvili, Isabelle Bloch, Valentin Goranko
2012 J jnl
Int. J. Approx. Reason.
Isabelle Bloch
2012 J jnl
Pattern Recognit.
Celina Maki Takemura, Roberto Marcondes Cesar Jr., Isabelle Bloch
2012 conf
MeshMed
Noura Faraj, Jean-Marc Thiery, Isabelle Bloch, Nadège Varsier, Joe Wiart, Tamy Boubekeur
2012 conf
ISBI
Guillaume Pizaine, Raphael Prevost, Elsa D. Angelini, Isabelle Bloch, Shérif Makram-Ebeid
2012 J jnl
Comput. Vis. Image Underst.
Geoffroy Fouquier, Jamal Atif, Isabelle Bloch
2012 conf
EMBC
Yuan Yang, Sylvain Chevallier, Joe Wiart, Isabelle Bloch
2012 J jnl
Pattern Recognit.
Erkut Erdem, Séverine Dubuisson, Isabelle Bloch
2011 conf
EMBC
Youssef Rouchdy, Isabelle Bloch
2011 conf
EUSFLAT Conf.
Maria Carolina Vanegas, Isabelle Bloch, Jordi Inglada
2011 conf
CLA
Jamal Atif, Céline Hudelot, Isabelle Bloch
2011 J jnl
Pattern Recognit.
Itebeddine Ghorbel, Florence Rossant, Isabelle Bloch, Sarah Tick, Michel Pâques
2011 conf
Eurographics (Dirk Bartz Prize)
Juan Pablo de la Plata Alcalde, Jérémie Anquez, Lazar Bibin, Tamy Boubekeur, Elsa D. Angelini, Isabelle Bloch
2011 C conf
ISMM
Isabelle Bloch
2011 B conf
Image Processing
Guillaume Pizaine, Elsa D. Angelini, Isabelle Bloch, Shérif Makram-Ebeid
2011 J jnl
IEEE Trans. Syst. Man Cybern. Part B
Nicolas Widynski, Séverine Dubuisson, Isabelle Bloch
2011 J jnl
Inf. Sci.
Isabelle Bloch
2011 J jnl
Traitement du Signal
Sylvie Chambon, Antonio Moreno-Ingelmo, Anand P. Santhanam, Jannick P. Rolland, Isabelle Bloch
2011 conf
DGCI
Isabelle Bloch, Alain Bretto
2011 B conf
ICIP
Itebeddine Ghorbel, Florence Rossant, Isabelle Bloch, Michel Pâques
2011 conf
VISAPP
Nicolas Widynski, Emanuel Aldea, Séverine Dubuisson, Isabelle Bloch
2011 conf
ISBI
Kevin Loquin, Isabelle Bloch, Kiyoko Nakashima, Florence Rossant, Michel Pâques
2011 C conf
CIARP
Geoffroy Fouquier, Jérémie Anquez, Isabelle Bloch, Céline Falip, Catherine Adamsbaum
2011 conf
ISBI
Guillaume Pizaine, Elsa D. Angelini, Isabelle Bloch, Shérif Makram-Ebeid
2010 J jnl
Image Vis. Comput.
Christophe Millet, Isabelle Bloch, Patrick Hède, Pierre-Alain Moëllic
2010 ch.
Methods for Handling Imperfect Spatial Information
Isabelle Bloch
2010 B conf
ICIP
Nicolas Chenouard, Johanna Buisson, Isabelle Bloch, Philippe Bastin, Jean-Christophe Olivo-Marin
2010 conf
IPTA
Nada Milisavljevic, Damien Closson, Isabelle Bloch
2010 C conf
IGARSS
Maria Carolina Vanegas, Isabelle Bloch, Jordi Inglada
2010 J jnl
Fuzzy Sets Syst.
Giovanni Palma, Isabelle Bloch, Serge Muller
2010 conf
IMAGAPP/IVAPP
Louis Apffel, Giovanni Palma, Serge Muller, Isabelle Bloch
2010 J jnl
Int. J. Comput. Assist. Radiol. Surg.
Lazar Bibin, Jérémie Anquez, Elsa D. Angelini, Isabelle Bloch
2010 A conf
ECAI
Céline Hudelot, Jamal Atif, Isabelle Bloch
2010 conf
ISVC (1)
Nicolas Widynski, Séverine Dubuisson, Isabelle Bloch
2010 conf
VISAPP (2)
Julien Wojak, Elsa D. Angelini, Isabelle Bloch
2010 conf
ISBI
Julien Wojak, Elsa D. Angelini, Isabelle Bloch
2010 C conf
IGARSS
Safa Rejichi, Ferdaous Chaabane, Florence Tupin, Isabelle Bloch
2010 conf
IPTA
Nicolas Widynski, Séverine Dubuisson, Isabelle Bloch
2010 conf
ISMBS
Juan Pablo de la Plata Alcalde, Lazar Bibin, Jérémie Anquez, Tamy Boubekeur, Elsa D. Angelini, Isabelle Bloch
2010 C ed.
CIARP
Isabelle Bloch, Roberto M. Cesar
2010 C conf
IPMU
Maria Carolina Vanegas, Isabelle Bloch, Jordi Inglada
2010 conf
ISBI
Jérémie Anquez, Lazar Bibin, Elsa D. Angelini, Isabelle Bloch
2010 conf
Digital Mammography / IWDM
Giovanni Palma, Isabelle Bloch, Serge Muller
2010 J jnl
IEEE Trans. Biomed. Eng.
Lazar Bibin, Jérémy Anquez, Juan Pablo de la Plata Alcalde, Tamy Boubekeur, Elsa D. Angelini, Isabelle Bloch
2009 J jnl
Fuzzy Sets Syst.
Hassan Khotanlou, Olivier Colliot, Jamal Atif, Isabelle Bloch
2009 J jnl
J. Math. Imaging Vis.
Olivier Nempont, Jamal Atif, Elsa D. Angelini, Isabelle Bloch
2009 J jnl
Medical Image Anal.
David Lesage, Elsa D. Angelini, Isabelle Bloch, Gareth Funka-Lea
2009 conf
WILF
Maria Carolina Vanegas, Isabelle Bloch, Henri Maître, Jordi Inglada
2009 conf
VISAPP (2)
Darwin Martínez, Isabelle Bloch, José Tiberio Hernández
2009 conf
ISBI
Florence Rossant, Itebeddine Ghorbel, Isabelle Bloch, Michel Pâques, Sarah Tick
2009 conf
ISBI
Jérémie Anquez, Elsa D. Angelini, Isabelle Bloch
2009 conf
MICCAI (1)
David Lesage, Elsa D. Angelini, Isabelle Bloch, Gareth Funka-Lea
2009 C conf
ISMM
Isabelle Bloch
2009 conf
ISBI
David Lesage, Elsa D. Angelini, Isabelle Bloch, Gareth Funka-Lea
2009 conf
Computer-Aided Diagnosis
G. J. Palma, Serge Muller, Isabelle Bloch, Razvan Iordache
2009 J jnl
Fuzzy Sets Syst.
Isabelle Bloch
2009 conf
ISBI
Giovanni Palma, Serge Muller, Isabelle Bloch, Razvan Iordache
2009 B conf
FUZZ-IEEE
Giovanni Palma, Isabelle Bloch, Serge Muller, Razvan Iordache
2009 conf
IGARSS (4)
Maria Carolina Vanegas, Isabelle Bloch, Jordi Inglada
2009 C conf
ECSQARU
Isabelle Bloch
2009 J jnl
Fuzzy Sets Syst.
Isabelle Bloch, Alfredo Petrosino, Andrea Tettamanzi
2009 conf
WILF
Isabelle Bloch
2009 conf
ISBI
Nicolas Chenouard, Isabelle Bloch, Jean-Christophe Olivo-Marin
2009 B conf
ICIP
Nicolas Chenouard, Isabelle Bloch, Jean-Christophe Olivo-Marin
2009 B conf
ICIP
Nicolas Chenouard, Isabelle Bloch, Jean-Christophe Olivo-Marin
2009 conf
EGC (best of volume)
Emanuel Aldea, Isabelle Bloch
2009 conf
MICCAI (1)
Jérémie Anquez, Tamy Boubekeur, Lazar Bibin, Elsa D. Angelini, Isabelle Bloch
2009 conf
EGC
Emanuel Aldea, Isabelle Bloch
2008 J jnl
CoRR
Alexandre Noma, Ana Beatriz Vicentim Graciano, Luís Augusto Consularo, Roberto M. Cesar, Isabelle Bloch
2008 conf
DGCI
Olivier Nempont, Jamal Atif, Enrico Angelini, Isabelle Bloch
2008 J jnl
Int. J. Approx. Reason.
Isabelle Bloch
2008 ch.
Les Relations Spatiales
Céline Hudelot, Jamal Atif, Isabelle Bloch
2008 B conf
ICIP
Nicolas Chenouard, Isabelle Bloch, Jean-Christophe Olivo-Marin
2008 J jnl
Fuzzy Sets Syst.
Isabelle Bloch
2008 J jnl
Fuzzy Sets Syst.
Céline Hudelot, Jamal Atif, Isabelle Bloch
2008 J jnl
Comput. Biol. Medicine
John Puentes, Bénédicte Batrancourt, Jamal Atif, Elsa D. Angelini, Laurent Lecornu, Abdelhamid Zemirline, Isabelle Bloch, Gouenou Coatrieux, Christian Roux
2008 conf
Computer-Aided Diagnosis
G. J. Palma, Gero Peters, Serge Muller, Isabelle Bloch
2008 conf
ISBI
David Lesage, Elsa D. Angelini, Isabelle Bloch, Gareth Funka-Lea
2008 B conf
ICPR
Nicolas Chenouard, Samantha Vernhettes, Isabelle Bloch, Jean-Christophe Olivo-Marin
2008 J jnl
IEEE Trans. Geosci. Remote. Sens.
Nada Milisavljevic, Isabelle Bloch
2008 conf
ISBI
Jérémie Anquez, Elsa D. Angelini, Isabelle Bloch
2008 A conf
ECAI
Geoffroy Fouquier, Jamal Atif, Isabelle Bloch
2008 A conf
ECAI
Olivier Nempont, Jamal Atif, Elsa D. Angelini, Isabelle Bloch
2008 J jnl
Pattern Recognit.
A. Moreno, Celina Maki Takemura, Olivier Colliot, Oscar Camara, Isabelle Bloch
2008 conf
ISBI
Vincent Israel-Jost, Elodie Breton, Elsa D. Angelini, Philippe Choquet, Isabelle Bloch, André Constantinesco
2007 conf
Computer-Aided Diagnosis
Gero Peters, Serge Muller, Bénédicte Grosjean, Sylvain Bernard, Isabelle Bloch
2007 conf
ISBI
Hassan Khotanlou, Jamal Atif, Elsa D. Angelini, Hugues Duffau, Isabelle Bloch
2007 conf
ISMM (1)
Isabelle Bloch
2007 conf
FIMH
Racha El-Berbari, Isabelle Bloch, Alban Redheuil, Elsa D. Angelini, Élie Mousseaux, Frédérique Frouin, Alain Herment
2007 Misc conf
ICIAP
Sylvie Chambon, Antonio Moreno-Ingelmo, Anand P. Santhanam, Jannick P. Rolland, Elsa D. Angelini, Isabelle Bloch
2007 conf
IPMI
Olivier Nempont, Jamal Atif, Elsa D. Angelini, Isabelle Bloch
2007 conf
WILF
Isabelle Bloch
2007 J jnl
IEEE Trans. Medical Imaging
Oscar Camara, Gaspar Delso, Olivier Colliot, Antonio Moreno-Ingelmo, Isabelle Bloch
2007 A* conf
IJCAI
Jamal Atif, Céline Hudelot, Geoffroy Fouquier, Isabelle Bloch, Elsa D. Angelini
2007 J jnl
Pattern Recognit. Lett.
Sorin Tilie, Isabelle Bloch, Louis Laborelli
2007 conf
ISBI
Jamal Atif, Céline Hudelot, Olivier Nempont, Nathalie Richard, Bénédicte Batrancourt, Elsa D. Angelini, Isabelle Bloch
2007 conf
SIBGRAPI
Ana Beatriz Vicentim Graciano, Roberto Marcondes Cesar Junior, Isabelle Bloch
2007 conf
GbRPR
Emanuel Aldea, Jamal Atif, Isabelle Bloch
2007 conf
ISVC (2)
Emanuel Aldea, Geoffroy Fouquier, Jamal Atif, Isabelle Bloch
2007 conf
GbRPR
Geoffroy Fouquier, Jamal Atif, Isabelle Bloch
2007 ch.
Handbook of Spatial Logics
Isabelle Bloch, Henk J. A. M. Heijmans, Christian Ronse
2007 conf
ISMM (2)
Isabelle Bloch
2007 conf
ISMM (1)
Luís Augusto Consularo, Roberto M. Cesar Jr., Luiz Henrique de Figueiredo, Isabelle Bloch
2007 C conf
IGARSS
Nada Milisavljevic, Isabelle Bloch
2007 J jnl
EURASIP J. Adv. Signal Process.
Florence Rossant, Isabelle Bloch
2007 conf
ICIP (6)
Luís Augusto Consularo, Roberto M. Cesar, Isabelle Bloch
2007 conf
MICCAI (1)
Antonio Moreno-Ingelmo, Sylvie Chambon, Anand P. Santhanam, Roberta Brocardo, Patrick Kupelian, Jannick P. Rolland, Elsa D. Angelini, Isabelle Bloch
2007 conf
RIAO
Christophe Millet, Isabelle Bloch
2006 C conf
FUSION
Sorin Tilie, Louis Laborelli, Isabelle Bloch
2006 ed.
WILF
Isabelle Bloch, Alfredo Petrosino, Andrea Tettamanzi
2006 J jnl
Pattern Recognit.
Olivier Colliot, Oscar Camara, Isabelle Bloch
2006 A conf
ECAI
Isabelle Bloch, Ramón Pino Pérez, Carlos Uzcátegui
2006 J jnl
IEEE Trans. Syst. Man Cybern. Part B
Isabelle Bloch, Olivier Colliot, Roberto Marcondes Cesar Junior
2006 B conf
Image Processing
Gero Peters, Serge Muller, Sylvain Bernard, Razvan Iordache, Isabelle Bloch
2006 J jnl
Int. J. Approx. Reason.
Isabelle Bloch
2006 conf
ISBI
Racha El-Berbari, Nadjia Kachenoura, Alban Redheuil, Isabelle Bloch, Élie Mousseaux, Frédérique Frouin
2005 conf
WILF
Hassan Khotanlou, Jamal Atif, Olivier Colliot, Isabelle Bloch
2005 conf
WILF
Isabelle Bloch, Gabriele Martino, Alfredo Petrosino
2005 J jnl
Graph. Model.
Isabelle Bloch, Jérémie Pescatore, Line Garnero
2005 C conf
CIARP
Antonio Moreno-Ingelmo, Gaspar Delso, Oscar Camara, Isabelle Bloch
2005 conf
WILF
Isabelle Bloch
2005 J jnl
Pattern Recognit. Lett.
Isabelle Bloch, Olivier Colliot, Oscar Camara, Thierry Géraud
2005 C conf
CIARP
Celina Maki Takemura, Roberto M. Cesar, Isabelle Bloch
2005 J jnl
Image Vis. Comput.
Isabelle Bloch
2005 J jnl
Pattern Recognit.
Roberto Marcondes Cesar Junior, Endika Bengoetxea, Isabelle Bloch, Pedro Larrañaga
2005 C conf
ISMM
Isabelle Bloch, Olivier Colliot, Roberto M. Cesar
2005 conf
ICIP (2)
Florence Rossant, Isabelle Bloch
2005 C conf
CIARP
Gero Peters, Serge Muller, Sylvain Bernard, Razvan Iordache, Frederick W. Wheeler, Isabelle Bloch
2005 conf
ENC
Jorge Márquez Flores, Isabelle Bloch, Francis Schmitt, Christophe Grangeat, T. Bousquet
2005 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Sidi Mohammed Réda Dehak, Isabelle Bloch, Henri Maître
2004 conf
WEA
Maria C. Boeres, Celso C. Ribeiro, Isabelle Bloch
2004 A* conf
KR
Isabelle Bloch, Ramón Pino Pérez, Carlos Uzcátegui
2004 J jnl
Fuzzy Sets Syst.
Florence Rossant, Isabelle Bloch
2004 J jnl
Fuzzy Sets Syst.
Olivier Colliot, Alexander V. Tuzikov, Roberto M. Cesar, Isabelle Bloch
2004 J jnl
Real Time Imaging
Oscar Camara, Olivier Colliot, Isabelle Bloch
2004 B conf
Image Processing
Olivier Colliot, Oscar Camara, Remi Dewynter, Isabelle Bloch
2004 C conf
CIARP
Jasmine Burguet, Isabelle Bloch
2004 J jnl
Signal Process.
Elodie Roullot, Alain Herment, Isabelle Bloch, Alain De Cesare, Mila Nikolova, Élie Mousseaux
2004 conf
3DPVT
Jasmine Burguet, Najib Gadi, Isabelle Bloch
2003 J jnl
IEEE Trans. Medical Imaging
Arnaud Cachia, Jean-François Mangin, Denis Rivière, Ferath Kherif, Nathalie Boddaert, Alexandre Andrade, Dimitri Papadopoulos-Orfanos, Jean-Baptiste Poline, Isabelle Bloch, Monica Zilbovicius, P. Sonigo, Francis Brunelle, Jean Régis
2003 J jnl
Medical Image Anal.
Arnaud Cachia, Jean-François Mangin, Denis Rivière, Dimitri Papadopoulos-Orfanos, Ferath Kherif, Isabelle Bloch, Jean Régis
2003 conf
ICASSP (3)
Yong Yu, Isabelle Bloch, Alain Trouvé
2003 J jnl
Res. Comput. Sci.
Jorge Márquez Flores, Isabelle Bloch, T. Bousquet, Francis Schmitt, Christophe Grangeat
2003 J jnl
Integr. Comput. Aided Eng.
Nada Milisavljevic, Isabelle Bloch
2003 J jnl
Pattern Recognit.
Isabelle Bloch, Anca L. Ralescu
2003 J jnl
Pattern Recognit. Lett.
Alexander V. Tuzikov, Olivier Colliot, Isabelle Bloch
2003 conf
WBIR
Oscar Camara, Gaspar Delso, Isabelle Bloch
2003 conf
WILF
Isabelle Bloch
2003 conf
DGCI
Isabelle Bloch
2003 J jnl
Pattern Recognit.
Nada Milisavljevic, Isabelle Bloch, Sebastiaan van den Broek, Marc Acheroy
2003 C conf
CIARP
Ana Beatriz Vicentim Graciano, Roberto M. Cesar, Isabelle Bloch
2003 J jnl
Artif. Intell.
Isabelle Bloch, Thierry Géraud, Henri Maître
2003 J jnl
IEEE Trans. Syst. Man Cybern. Part C
Nada Milisavljevic, Isabelle Bloch
2003 J jnl
Pattern Recognit.
Petr Dokládal, Isabelle Bloch, Michel Couprie, Daniel Ruijters, Raquel Urtasun, Line Garnero
2002 conf
ICPR (1)
Alexander V. Tuzikov, Olivier Colliot, Isabelle Bloch
2002 J jnl
Medical Image Anal.
Jean-François Mangin, Cyril Poupon, Chris A. Clark, Denis Le Bihan, Isabelle Bloch
2002 J jnl
Fuzzy Sets Syst.
Aymeric Perchant, Isabelle Bloch
2002 conf
MICCAI (1)
Arnaud Cachia, Jean-François Mangin, Denis Rivière, Dimitri Papadopoulos-Orfanos, Isabelle Bloch, Jean Régis
2002 conf
ISBI
Alain Herment, Elodie Roullot, Isabelle Bloch, Claire Pellot, Andrew Todd-Pokropek, Élie Mousseaux
2002 conf
ICPR (2)
Roberto M. Cesar, Endika Bengoetxea, Isabelle Bloch
2002 J jnl
Pattern Recognit.
Endika Bengoetxea, Pedro Larrañaga, Isabelle Bloch, Aymeric Perchant, Claudia Boeres
2002 J jnl
J. Appl. Non Class. Logics
Isabelle Bloch
2002 conf
SIBGRAPI
Jishu Ashimine, Teófilo Emídio de Campos, Roberto Marcondes Cesar Junior, Isabelle Bloch
2002 ch.
Estimation of Distribution Algorithms
Endika Bengoetxea, Pedro Larrañaga, Aymeric Perchant, Isabelle Bloch
2002 conf
Theoretical Foundations of Computer Vision
Isabelle Bloch
2001 A conf
MICCAI
Arnaud Cachia, Jean-François Mangin, Denis Rivière, Nathalie Boddaert, Alexandre Andrade, Ferath Kherif, P. Sonigo, Dimitri Papadopoulos-Orfanos, Monica Zilbovicius, Jean-Baptiste Poline, Isabelle Bloch, Francis Brunelle, Jean Régis
2001 J jnl
Pattern Recognit.
Yann Cointepas, Isabelle Bloch, Line Garnero
2001 conf
SIP
Nada Milisavljevic, Isabelle Bloch, Marc Acheroy
2001 A conf
MICCAI
Jean-François Mangin, Cyril Poupon, Chris A. Clark, Denis Le Bihan, Isabelle Bloch
2001 conf
EMMCVPR
Endika Bengoetxea, Pedro Larrañaga, Isabelle Bloch, Aymeric Perchant
2001 C conf
ECSQARU
Isabelle Bloch, Ramón Pino Pérez, Carlos Uzcátegui
2001 conf
ICAPR
Teófilo Emídio de Campos, Isabelle Bloch, Roberto Marcondes Cesar Junior
2001 ch.
Data Fusion and Perception
Isabelle Bloch
2001 J jnl
Int. J. Intell. Syst.
Isabelle Bloch, Anthony Hunter, Alain Appriou, André Ayoun, Salem Benferhat, Philippe Besnard, Laurence Cholvy, Roger M. Cooke, Frédéric Cuppens, Didier Dubois, Hélène Fargier, Michel Grabisch, Rudolf Kruse, Jérôme Lang, Serafín Moral, Henri Prade, Alessandro Saffiotti, Philippe Smets, Claudio Sossai
2001 conf
ICIP (3)
Sidi Mohammed Réda Dehak, Isabelle Bloch, Henri Maître
2001 conf
ICIP (3)
Petr Dokládal, Raquel Urtasun, Isabelle Bloch, Line Garnero
2001 J jnl
Medical Image Anal.
Cyril Poupon, Jean-François Mangin, Chris A. Clark, Vincent Frouin, Jean Régis, Denis Le Bihan, Isabelle Bloch
2000 J jnl
Pattern Recognit.
Isabelle Bloch
2000 B conf
ICPR
Aymeric Perchant, Isabelle Bloch
2000 J jnl
Pattern Recognit.
Isabelle Bloch
2000 B conf
ICPR
Elodie Roullot, Alain Herment, Isabelle Bloch, Mila Nikolova, Élie Mousseaux
2000 J jnl
Medical Image Anal.
Hilmi Rifai, Isabelle Bloch, Seth Hutchinson, Joe Wiart, Line Garnero
2000 A* conf
KR
Isabelle Bloch
1999 conf
DGCI
Yann Cointepas, Isabelle Bloch, Line Garnero
1999 J jnl
IEEE Trans. Geosci. Remote. Sens.
Florence Tupin, Isabelle Bloch, Henri Maître
1999 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Isabelle Bloch
1999 J jnl
Int. J. Uncertain. Fuzziness Knowl. Based Syst.
Isabelle Bloch
1999 A conf
MICCAI
Cyril Poupon, Chris A. Clark, Vincent Frouin, Denis Le Bihan, Isabelle Bloch, Jean-François Mangin
1999 conf
3DIM
Yann Cointepas, Isabelle Bloch, Line Garnero
1999 J jnl
Pattern Recognit.
Isabelle Bloch
1999 B conf
Image Processing
Hilmi Rifai, Isabelle Bloch, Seth A. Hutchinson, Joe Wiart, Line Garnero
1999 conf
IPMI
Olivier Coulon, Jean-François Mangin, Jean-Baptiste Poline, Vincent Frouin, Isabelle Bloch
1998 conf
ICIP (3)
Yann Cointepas, Isabelle Bloch, Line Garnero
1998 J jnl
Pattern Recognit.
Sylvie Le Hégarat-Mascle, Isabelle Bloch, Daniel Vidal-Madjar
1998 A conf
MICCAI
Cyril Poupon, Jean-François Mangin, Vincent Frouin, Jean Régis, Fabrice Poupon, M. Pachot-Clouard, Denis Le Bihan, Isabelle Bloch
1998 B conf
SMC
Isabelle Bloch
1997 J jnl
IEEE Trans. Geosci. Remote. Sens.
Sylvie Le Hégarat-Mascle, Isabelle Bloch, Daniel Vidal-Madjar
1997 conf
ICIP (2)
Lars Aurdal, Isabelle Bloch, Henri Maître, Christine Graffigne, Catherine Adamsbaum
1997 conf
ICIP (3)
Isabelle Bloch, Lars Aurdal, Domenico Bijno, Jens Müller
1997 conf
ICIAP (1)
Isabelle Bloch, Henri Maître
1997 J jnl
Int. J. Uncertain. Fuzziness Knowl. Based Syst.
Isabelle Bloch, Henri Maître, Morteza Anvar
1997 conf
Fuzzy Logic in Artificial Intelligence (IJCAI Workshop)
Isabelle Bloch
1997 conf
Scale-Space
Olivier Coulon, Isabelle Bloch, Vincent Frouin, Jean-François Mangin
1996 conf
ICIP (3)
Bert Verdonck, Isabelle Bloch, Henri Maître, Dirk Vandermeulen, Paul Suetens, Guy Marchal
1996 conf
ICIP (2)
Isabelle Bloch
1996 J jnl
IEEE Trans. Syst. Man Cybern. Part A
Isabelle Bloch
1996 J jnl
Pattern Recognit. Lett.
Isabelle Bloch
1995 conf
CVRMed
Isabelle Bloch, Claire Pellot, Francisco Sureda, Alain Herment
1995 conf
CVRMed
Jean-François Mangin, Jean Régis, Isabelle Bloch, Vincent Frouin, Y. Samson, Jaime López-Krahe
1995 J jnl
J. Math. Imaging Vis.
Jean-François Mangin, Vincent Frouin, Isabelle Bloch, Jean Régis, Jaime López-Krahe
1995 conf
Fuzzy Logic in Artificial Intelligence
Isabelle Bloch
1995 Misc conf
SAC
Isabelle Bloch, Henri Maître
1995 J jnl
Pattern Recognit.
Isabelle Bloch, Henri Maître
1995 conf
ICIP (3)
Thierry Géraud, Jean-François Mangin, Isabelle Bloch, Henri Maître
1994 conf
ICIP (1)
Isabelle Bloch
1994 Misc conf
SAC
Isabelle Bloch
1994 conf
ICIP (2)
Henri Maître, Isabelle Bloch, Marc Sigelle
1993 J jnl
Ann. Math. Artif. Intell.
Isabelle Bloch, Henri Maître
1993 J jnl
Pattern Recognit. Lett.
Isabelle Bloch
redb/extractors/decompiler/apk/smali_cfg.py
← Index redb/extractors/decompiler/apk/smali_cfg.py python
"""Build a basic-block CFG from smali method bodies and compute graph metrics.

Handles both apktool smali (label-based branches like :cond_0) and
androguard fallback smali (offset-based branches like +005h).

Graph metrics match the Binary Ninja CFG pipeline for cross-platform
consistency: cyclomatic complexity (E - N + 2), loop count (back edges),
max BFS depth, max fan-out. Advanced features (topology hash, MD-index,
WL-MinHash, packed adjacency) reuse the generic cfg_features module.
"""

import logging
import re
from collections import deque
from dataclasses import dataclass, field
from typing import Dict, List, Optional, Tuple

from redb.extractors.decompiler.apk.smali_normalization import (
    categorize_opcode,
    CATEGORY_TO_ACFG_INDEX,
)
from redb.extractors.decompiler.bninja.analysis import cfg_features

logger = logging.getLogger(__name__)


# Instruction classification patterns
_IF_RE = re.compile(r"^if-\w+")
_GOTO_RE = re.compile(r"^goto(?:/\d+)?(?:\s|$)")
_RETURN_RE = re.compile(r"^return")
_THROW_RE = re.compile(r"^throw(?:\s|$)")
_SWITCH_RE = re.compile(r"^(?:packed|sparse)-switch\s")

# Label reference in apktool format: :cond_0, :goto_1, etc.
_LABEL_TARGET_RE = re.compile(r":[\w]+")

# Offset reference in androguard format: +005h, -003h
_OFFSET_TARGET_RE = re.compile(r"[+-]\w+h\b")

# Directives and labels
_SKIP_RE = re.compile(r"^\s*(?:\.|#|$)")
_LABEL_DEF_RE = re.compile(r"^\s*:([\w]+)")


@dataclass
class SmaliCFGMetrics:
    """CFG-derived metrics for a smali method."""
    block_count: int = 0
    edge_count: int = 0
    cyclomatic_complexity: int = 1
    loop_count: int = 0
    max_depth: int = 0
    max_fan_out: int = 0
    # Obfuscation scores (parity with code_binja_decompiled_functions_content)
    flattened_score: float = 0.0
    mba_score: float = 0.0
    # Per-block ACFG feature vectors (Gemini-style, same format as BNinja).
    # Each entry: [instr_count, arithmetic, logic, transfer, call,
    #              comparison, memory, successor_count]
    # Empty list if block features were not computed.
    block_features: List[List[int]] = field(default_factory=list)
    # Advanced CFG features (Phase 5 — parity with code_binja_cfg_functions)
    cfg_topology_hash: bytes = field(default_factory=lambda: b'\x00' * 16)
    md_index_topdown: int = 0
    md_index_bottomup: int = 0
    cfg_feature_tlsh: Optional[str] = None
    wl_minhash: List[int] = field(default_factory=lambda: [255] * 128)
    cfg_adjacency: List[int] = field(default_factory=list)


def compute_cfg_metrics(smali_body: str) -> SmaliCFGMetrics:
    """Compute CFG metrics from a smali method body.

    Works with both apktool label-based smali and androguard offset-based
    smali. Falls back to instruction-counting heuristic if CFG construction
    fails.
    """
    if not smali_body or not smali_body.strip():
        return SmaliCFGMetrics()

    lines = smali_body.split("\n")

    # Determine format: apktool (has labels) vs androguard (no labels)
    has_labels = any(_LABEL_DEF_RE.match(line) for line in lines)

    if has_labels:
        return _build_cfg_with_labels(lines)
    else:
        return _build_cfg_from_instructions(lines)


def _parse_instructions(lines: List[str]) -> List[Tuple[int, str]]:
    """Extract instruction lines, skipping directives, labels, blanks, comments.

    Returns list of (original_line_index, stripped_instruction).
    """
    instructions = []
    for i, line in enumerate(lines):
        stripped = line.strip()
        if not stripped or stripped.startswith(".") or stripped.startswith("#"):
            continue
        if stripped.startswith(":"):
            continue
        instructions.append((i, stripped))
    return instructions


def _build_cfg_with_labels(lines: List[str]) -> SmaliCFGMetrics:
    """Build CFG using apktool label-based format.

    Labels (e.g., :cond_0, :goto_1) define branch targets.
    Branch instructions reference labels directly.
    """
    # First pass: collect label positions and instructions
    # We track everything by instruction index (position in instruction list)
    labels: Dict[str, int] = {}  # label_name -> instruction_index
    instructions: List[str] = []
    # Map: line_index -> instruction_index (for label resolution)
    line_to_instr: Dict[int, int] = {}

    instr_idx = 0
    for i, line in enumerate(lines):
        stripped = line.strip()
        if not stripped or stripped.startswith(".") or stripped.startswith("#"):
            continue
        m = _LABEL_DEF_RE.match(stripped)
        if m:
            label_name = ":" + m.group(1)
            labels[label_name] = instr_idx  # next instruction after this label
            continue
        line_to_instr[i] = instr_idx
        instructions.append(stripped)
        instr_idx += 1

    n_instr = len(instructions)
    if n_instr == 0:
        return SmaliCFGMetrics()

    # Identify basic block start points
    block_starts = {0}

    for idx, instr in enumerate(instructions):
        next_idx = idx + 1

        if _IF_RE.match(instr):
            # Conditional branch: fall-through + branch target
            if next_idx < n_instr:
                block_starts.add(next_idx)
            target_label = _extract_label_target(instr)
            if target_label and target_label in labels:
                block_starts.add(labels[target_label])

        elif _GOTO_RE.match(instr):
            # Unconditional jump
            if next_idx < n_instr:
                block_starts.add(next_idx)
            target_label = _extract_label_target(instr)
            if target_label and target_label in labels:
                block_starts.add(labels[target_label])

        elif _RETURN_RE.match(instr) or _THROW_RE.match(instr):
            if next_idx < n_instr:
                block_starts.add(next_idx)

        elif _SWITCH_RE.match(instr):
            if next_idx < n_instr:
                block_starts.add(next_idx)

    # Also add all label targets as block starts
    for label, target_idx in labels.items():
        if target_idx < n_instr:
            block_starts.add(target_idx)

    # Build blocks: sorted list of start indices
    sorted_starts = sorted(block_starts)
    n_blocks = len(sorted_starts)

    # Map instruction index -> block index
    instr_to_block = {}
    for block_idx, start in enumerate(sorted_starts):
        end = sorted_starts[block_idx + 1] if block_idx + 1 < n_blocks else n_instr
        for i in range(start, end):
            instr_to_block[i] = block_idx

    # Collect per-block instruction lists for ACFG feature extraction
    block_instructions: List[List[str]] = []
    for block_idx in range(n_blocks):
        start = sorted_starts[block_idx]
        end = sorted_starts[block_idx + 1] if block_idx + 1 < n_blocks else n_instr
        block_instructions.append(instructions[start:end])

    # Build adjacency lists
    successors: List[List[int]] = [[] for _ in range(n_blocks)]

    for block_idx in range(n_blocks):
        start = sorted_starts[block_idx]
        end = sorted_starts[block_idx + 1] if block_idx + 1 < n_blocks else n_instr
        last_instr_idx = end - 1
        last_instr = instructions[last_instr_idx]

        if _IF_RE.match(last_instr):
            # Fall-through
            if block_idx + 1 < n_blocks:
                _add_edge(successors, block_idx, block_idx + 1)
            # Branch target
            target_label = _extract_label_target(last_instr)
            if target_label and target_label in labels:
                target_block = instr_to_block.get(labels[target_label])
                if target_block is not None:
                    _add_edge(successors, block_idx, target_block)

        elif _GOTO_RE.match(last_instr):
            # Only branch target, no fall-through
            target_label = _extract_label_target(last_instr)
            if target_label and target_label in labels:
                target_block = instr_to_block.get(labels[target_label])
                if target_block is not None:
                    _add_edge(successors, block_idx, target_block)

        elif _RETURN_RE.match(last_instr) or _THROW_RE.match(last_instr):
            # No successors
            pass

        elif _SWITCH_RE.match(last_instr):
            # Fall-through (default case)
            if block_idx + 1 < n_blocks:
                _add_edge(successors, block_idx, block_idx + 1)
            # Switch targets are defined in switch payload (.packed-switch/.sparse-switch)
            # which we can't easily parse from the body alone. The targets are labels
            # referenced in the switch data section. We handle them via label targets.
            _add_switch_targets(
                lines, last_instr, labels, instr_to_block,
                successors, block_idx
            )

        else:
            # Normal instruction at end of block — fall through
            if block_idx + 1 < n_blocks:
                _add_edge(successors, block_idx, block_idx + 1)

    return _compute_metrics_from_cfg(successors, n_blocks, block_instructions)


def _build_cfg_from_instructions(lines: List[str]) -> SmaliCFGMetrics:
    """Build CFG from androguard offset-based format.

    Without labels, we use instruction counting to build a basic CFG.
    Branch targets are hex offsets (e.g., +005h) which we resolve by
    tracking instruction positions.
    """
    instructions = _parse_instructions(lines)
    n_instr = len(instructions)
    if n_instr == 0:
        return SmaliCFGMetrics()

    # Identify basic block starts
    block_starts = {0}

    for idx, (_, instr) in enumerate(instructions):
        next_idx = idx + 1

        if _IF_RE.match(instr):
            if next_idx < n_instr:
                block_starts.add(next_idx)
            # Try to resolve offset target to instruction index
            target = _resolve_offset_target(instr, idx, n_instr)
            if target is not None:
                block_starts.add(target)

        elif _GOTO_RE.match(instr):
            if next_idx < n_instr:
                block_starts.add(next_idx)
            target = _resolve_offset_target(instr, idx, n_instr)
            if target is not None:
                block_starts.add(target)

        elif _RETURN_RE.match(instr) or _THROW_RE.match(instr):
            if next_idx < n_instr:
                block_starts.add(next_idx)

    sorted_starts = sorted(block_starts)
    n_blocks = len(sorted_starts)

    # Map instruction index -> block index
    instr_to_block = {}
    for block_idx, start in enumerate(sorted_starts):
        end = sorted_starts[block_idx + 1] if block_idx + 1 < n_blocks else n_instr
        for i in range(start, end):
            instr_to_block[i] = block_idx

    # Collect per-block instruction lists for ACFG features
    block_instructions: List[List[str]] = []
    for block_idx in range(n_blocks):
        start = sorted_starts[block_idx]
        end = sorted_starts[block_idx + 1] if block_idx + 1 < n_blocks else n_instr
        block_instructions.append(
            [instructions[i][1] for i in range(start, end)]
        )

    # Build adjacency
    successors: List[List[int]] = [[] for _ in range(n_blocks)]

    for block_idx in range(n_blocks):
        start = sorted_starts[block_idx]
        end = sorted_starts[block_idx + 1] if block_idx + 1 < n_blocks else n_instr
        last_idx = end - 1
        _, last_instr = instructions[last_idx]

        if _IF_RE.match(last_instr):
            if block_idx + 1 < n_blocks:
                _add_edge(successors, block_idx, block_idx + 1)
            target = _resolve_offset_target(last_instr, last_idx, n_instr)
            if target is not None:
                target_block = instr_to_block.get(target)
                if target_block is not None:
                    _add_edge(successors, block_idx, target_block)

        elif _GOTO_RE.match(last_instr):
            target = _resolve_offset_target(last_instr, last_idx, n_instr)
            if target is not None:
                target_block = instr_to_block.get(target)
                if target_block is not None:
                    _add_edge(successors, block_idx, target_block)

        elif _RETURN_RE.match(last_instr) or _THROW_RE.match(last_instr):
            pass

        else:
            if block_idx + 1 < n_blocks:
                _add_edge(successors, block_idx, block_idx + 1)

    return _compute_metrics_from_cfg(successors, n_blocks, block_instructions)


def _resolve_offset_target(instr: str, current_idx: int, n_instr: int) -> Optional[int]:
    """Resolve androguard hex offset to an instruction index.

    Androguard offsets (e.g., +005h, -003h) are in 16-bit code units relative
    to the branch instruction. Since most Dalvik instructions are 1-3 code
    units, we approximate: each instruction ≈ 1 code unit for offset
    resolution. This gives an approximate but usable CFG.

    For better accuracy, we treat the offset as an instruction count
    (which is correct for 1-unit instructions and approximate for larger ones).
    """
    m = _OFFSET_TARGET_RE.search(instr)
    if not m:
        return None

    offset_str = m.group(0)
    try:
        # Parse hex offset: +005h -> 5, -003h -> -3
        offset_val = int(offset_str.rstrip("h"), 16)
    except ValueError:
        return None

    target = current_idx + offset_val
    if 0 <= target < n_instr:
        return target
    return None


def _extract_label_target(instr: str) -> Optional[str]:
    """Extract the label target from a branch/goto instruction.

    E.g., 'if-eqz v0, :cond_0' -> ':cond_0'
          'goto :goto_1' -> ':goto_1'
    """
    m = _LABEL_TARGET_RE.search(instr)
    return m.group(0) if m else None


def _add_edge(successors: List[List[int]], src: int, dst: int):
    """Add edge if not duplicate."""
    if dst not in successors[src]:
        successors[src].append(dst)


def _add_switch_targets(
    lines: List[str],
    switch_instr: str,
    labels: Dict[str, int],
    instr_to_block: Dict[int, int],
    successors: List[List[int]],
    block_idx: int,
):
    """Try to resolve switch case targets.

    Switch payloads in apktool smali are defined as:
      .packed-switch 0x0
        :pswitch_0
        :pswitch_1
      .end packed-switch

    We scan the body for label references in switch payload sections.
    """
    # Find the switch payload target label
    target_label = _extract_label_target(switch_instr)
    if not target_label:
        return

    # Scan for packed-switch/sparse-switch payload sections
    in_switch = False
    for line in lines:
        stripped = line.strip()
        if stripped.startswith(".packed-switch") or stripped.startswith(".sparse-switch"):
            in_switch = True
            continue
        if stripped.startswith(".end packed-switch") or stripped.startswith(".end sparse-switch"):
            in_switch = False
            continue
        if in_switch:
            # Lines in switch payload are label references
            m = _LABEL_TARGET_RE.search(stripped)
            if m:
                case_label = m.group(0)
                if case_label in labels:
                    target_block = instr_to_block.get(labels[case_label])
                    if target_block is not None:
                        _add_edge(successors, block_idx, target_block)


def _build_block_features(
    block_instructions: List[List[str]],
    successors: List[List[int]],
    n: int,
) -> List[List[int]]:
    """Build Gemini-style ACFG feature vectors per block from smali instructions.

    Same 8-element format as Binary Ninja's build_block_features:
    [instr_count, arithmetic, logic, transfer, call, comparison, memory, successor_count]

    Uses semantic opcode categorization (analogous to LLIL operation categories)
    to map each Dalvik instruction to one of 7 category bins.
    """
    features = []
    for i in range(n):
        cats = [0, 0, 0, 0, 0, 0, 0]  # 7 categories
        instrs = block_instructions[i] if i < len(block_instructions) else []
        for instr in instrs:
            opcode = instr.split(None, 1)[0] if instr else ""
            category = categorize_opcode(opcode)
            acfg_idx = CATEGORY_TO_ACFG_INDEX.get(category, 6)
            cats[acfg_idx] += 1

        features.append([
            min(len(instrs), 65535),
            min(cats[0], 65535),  # arithmetic
            min(cats[1], 65535),  # logic
            min(cats[2], 65535),  # transfer
            min(cats[3], 65535),  # call
            min(cats[4], 65535),  # comparison
            min(cats[5], 65535),  # memory
            min(len(successors[i]), 65535),
        ])
    return features


def _compute_metrics_from_cfg(
    successors: List[List[int]],
    n: int,
    block_instructions: Optional[List[List[str]]] = None,
) -> SmaliCFGMetrics:
    """Compute all graph metrics from the adjacency list."""
    if n == 0:
        return SmaliCFGMetrics()

    edge_count = sum(len(s) for s in successors)

    # Cyclomatic complexity: E - N + 2
    cc = edge_count - n + 2
    if cc < 1:
        cc = 1

    # Loop count: back edges via iterative DFS
    loop_count = _count_back_edges(successors, n)

    # Max BFS depth from entry
    max_depth = _bfs_max_depth(successors, n)

    # Max fan-out
    max_fan_out = max(len(s) for s in successors) if successors else 0

    # Per-block ACFG features
    bb_features = []
    if block_instructions is not None:
        bb_features = _build_block_features(block_instructions, successors, n)

    # Obfuscation scores
    flattened = _compute_flattened_score(successors, n)
    mba = (
        _compute_mba_score(block_instructions, n)
        if block_instructions is not None
        else 0.0
    )

    # Advanced CFG features — reuse generic cfg_features module
    # Build predecessors from successors
    predecessors = [[] for _ in range(n)]
    for src, targets in enumerate(successors):
        for tgt in targets:
            predecessors[tgt].append(src)

    try:
        bfs = cfg_features.bfs_order(successors, n)
        topology_hash = cfg_features.compute_topology_hash(successors, bfs, n)
        md_topdown = cfg_features.compute_md_index_topdown(
            successors, predecessors, bfs
        )
        md_bottomup = cfg_features.compute_md_index_bottomup(
            successors, predecessors, n
        )
        cfg_tlsh = (
            cfg_features.compute_cfg_feature_tlsh(bb_features, bfs)
            if bb_features
            else None
        )
        wl_minhash = (
            cfg_features.compute_wl_minhash(
                successors, predecessors, bb_features, n
            )
            if bb_features
            else [255] * 128
        )
        adjacency = cfg_features.pack_adjacency(successors)
    except Exception as e:
        logger.debug("Advanced CFG features failed: %s", e)
        topology_hash = b'\x00' * 16
        md_topdown = 0
        md_bottomup = 0
        cfg_tlsh = None
        wl_minhash = [255] * 128
        adjacency = []

    return SmaliCFGMetrics(
        block_count=n,
        edge_count=edge_count,
        cyclomatic_complexity=cc,
        loop_count=loop_count,
        max_depth=max_depth,
        max_fan_out=max_fan_out,
        flattened_score=flattened,
        mba_score=mba,
        block_features=bb_features,
        cfg_topology_hash=topology_hash,
        md_index_topdown=md_topdown,
        md_index_bottomup=md_bottomup,
        cfg_feature_tlsh=cfg_tlsh,
        wl_minhash=wl_minhash,
        cfg_adjacency=adjacency,
    )


def _compute_dominators(successors: List[List[int]], n: int) -> List[int]:
    """Compute immediate dominators using iterative dataflow algorithm.

    Returns idom[i] = immediate dominator of block i.  idom[0] = -1 (entry).
    """
    if n == 0:
        return []

    # Build predecessors
    preds: List[List[int]] = [[] for _ in range(n)]
    for src, targets in enumerate(successors):
        for tgt in targets:
            preds[tgt].append(src)

    # Initialize: dom[0] = {0}, dom[i] = all blocks
    all_blocks = set(range(n))
    dom = [all_blocks.copy() for _ in range(n)]
    dom[0] = {0}

    changed = True
    while changed:
        changed = False
        for i in range(1, n):
            if not preds[i]:
                new_dom = {i}
            else:
                new_dom = all_blocks.copy()
                for p in preds[i]:
                    new_dom &= dom[p]
                new_dom.add(i)
            if new_dom != dom[i]:
                dom[i] = new_dom
                changed = True

    # Extract immediate dominators from dominator sets
    idom = [-1] * n
    for i in range(1, n):
        # idom[i] = the dominator of i (other than i itself) that is
        # dominated by all other dominators of i
        doms_of_i = dom[i] - {i}
        if not doms_of_i:
            continue
        for candidate in doms_of_i:
            # candidate is idom if it is dominated by all other dominators
            if all(candidate in dom[other] for other in doms_of_i):
                # candidate dominates no other dominator besides itself
                # (i.e., it's the closest dominator)
                if all(
                    other == candidate or candidate not in dom[other]
                    for other in doms_of_i
                ):
                    pass  # not the closest
                else:
                    continue
            else:
                continue
        # Simpler approach: idom is the element in doms_of_i with the
        # largest dominator set (closest to i in the dominator tree)
        idom[i] = max(doms_of_i, key=lambda d: len(dom[d]))

    return idom


def _compute_flattened_score(
    successors: List[List[int]], n: int
) -> float:
    """Detect control flow flattening — same heuristic as Binary Ninja's
    ObfuscationScores.flattened_score (Tim Blazytko).

    Walks over all basic blocks, finds those with back edges (loop headers),
    and computes the ratio of blocks dominated by them to total blocks.
    """
    if n <= 1:
        return 0.0

    idom = _compute_dominators(successors, n)

    # Build dominator tree children from idom
    dom_children: List[List[int]] = [[] for _ in range(n)]
    for i in range(1, n):
        if idom[i] >= 0:
            dom_children[idom[i]].append(i)

    max_ratio = 0.0

    for block in range(n):
        # Get all blocks dominated by this block (reachable in dominator tree)
        dominated = set()
        worklist = [block]
        while worklist:
            b = worklist.pop()
            dominated.add(b)
            worklist.extend(dom_children[b])

        # Check for a back edge: any predecessor of block is in dominated set
        has_back_edge = False
        for src, targets in enumerate(successors):
            if block in targets and src in dominated:
                has_back_edge = True
                break

        if not has_back_edge:
            continue

        ratio = len(dominated) / n
        if ratio > max_ratio:
            max_ratio = ratio

    return max_ratio


def _compute_mba_score(block_instructions: List[List[str]], n: int) -> float:
    """Compute mixed boolean-arithmetic score for a smali method.

    Same concept as Binary Ninja's ObfuscationScores.MBA_score: ratio of
    instructions that mix arithmetic and logic operations.

    At the smali level, we check each instruction's opcode:
    - Arithmetic: add, sub, mul, div, rem, neg
    - Logic: and, or, xor, shl, shr, ushr, not

    Since Dalvik instructions are single operations (unlike x86 complex
    instructions or HLIL expression trees), we check per-instruction whether
    the method mixes both categories. The score is the fraction of
    instructions belonging to the minority category when both are present.
    """
    ARITHMETIC_OPS = {"add", "sub", "mul", "div", "rem", "neg"}
    LOGIC_OPS = {"and", "or", "xor", "shl", "shr", "ushr", "not"}

    arithmetic_count = 0
    logic_count = 0
    total_instructions = 0

    for block in block_instructions[:n]:
        for instr in block:
            opcode = instr.split(None, 1)[0] if instr else ""
            # Strip type suffix: add-int/2addr -> add
            base = opcode.split("-")[0] if "-" in opcode else opcode
            total_instructions += 1
            if base in ARITHMETIC_OPS:
                arithmetic_count += 1
            elif base in LOGIC_OPS:
                logic_count += 1

    if total_instructions == 0:
        return 0.0

    # MBA is present when both arithmetic and logic operations co-exist.
    # Score = min(arith, logic) / total — measures how much mixing occurs.
    if arithmetic_count == 0 or logic_count == 0:
        return 0.0

    return min(arithmetic_count, logic_count) / total_instructions


def _count_back_edges(successors: List[List[int]], n: int) -> int:
    """Count natural loops via iterative DFS back-edge detection.

    Same algorithm as bninja/analysis/cfg_features.py:count_back_edges.
    """
    if n == 0:
        return 0

    WHITE, GRAY, BLACK = 0, 1, 2
    color = [WHITE] * n
    back_edges = 0

    stack = [(0, iter(successors[0]))]
    color[0] = GRAY

    while stack:
        u, children = stack[-1]
        try:
            v = next(children)
            if color[v] == GRAY:
                back_edges += 1
            elif color[v] == WHITE:
                color[v] = GRAY
                stack.append((v, iter(successors[v])))
        except StopIteration:
            color[u] = BLACK
            stack.pop()

    return back_edges


def _bfs_max_depth(successors: List[List[int]], n: int) -> int:
    """Maximum BFS depth from entry block.

    Same algorithm as bninja/analysis/cfg_features.py:bfs_max_depth.
    """
    if n == 0:
        return 0

    depth = {0: 0}
    max_d = 0
    queue = deque([0])

    while queue:
        node = queue.popleft()
        for s in successors[node]:
            if s not in depth:
                depth[s] = depth[node] + 1
                if depth[s] > max_d:
                    max_d = depth[s]
                queue.append(s)

    return max_d