I take some ideas from Drawing on an image with Tikz but with another method and I complete the code with Jack's method for the clip image.
\documentclass{scrartcl}
\usepackage{tikz,fullpage}
\usetikzlibrary{fit,calc,spy}
\tikzset{number/.style={fixed,fixed zerofill,precision=1}}
\makeatletter
\tikzset{spy style/.style={spy using outlines={magnification=8, size=4cm}}}
\newenvironment{IncludeGH}[2][\textwidth]{%
\def\GHClipImage{#2}
\begin{scope}[spy style]
\node[anchor=south west,inner sep=0](GHimage){\includegraphics[width=#1]{#2}};
\begin{scope}[x={(GHimage.south east)},y={(GHimage.north west)}]}{%
\end{scope}\end{scope}
}
\newenvironment{IncludeClipGH}[2][\textwidth]{%
\def\GHClipImage{#2}
\begin{scope}
\node[anchor=south west,inner sep=0](GHimage){\phantom{\includegraphics[width=#1]{#2}}};
\begin{scope}[x={(GHimage.south east)},y={(GHimage.north west)}]}{%
\end{scope}\end{scope}
}
\pgfkeys{GHShowDetail/.cd,
width/.code = \def\GH@width{#1},
height/.code = \def\GH@height{#1},
/GHShowDetail/.unknown/.code = {\let\searchname=\pgfkeyscurrentname
\pgfkeysalso{\searchname/.try=#1,
/tikz/\searchname/.retry=#1}}}
\def\GHShowDetail{\pgfutil@ifnextchar[{\GH@ShowDetail}{\GH@ShowDetail[]}}
\def\GH@ShowDetail[#1] at (#2,#3)#4{
\pgfkeys{GHShowDetail/.cd,
width = 0.1,
height = 0.1}
\pgfqkeys{/GHShowDetail}{#1}
\path (#2,#3)--++(\GH@width/2,\GH@height/2) coordinate (rightnode)
(#2,#3)--++(-\GH@width/2,-\GH@height/2) coordinate (leftnode);
\node [fit=(leftnode) (rightnode),
ultra thick,draw,
color= lightgray,
](#4) {};}
\pgfkeys{GHShowPath/.cd,
/GHShowPath/.unknown/.code = {\let\searchname=\pgfkeyscurrentname
\pgfkeysalso{\searchname/.try=#1,
/tikz/\searchname/.retry=#1}}}
\def\GHShowPath{\pgfutil@ifnextchar[{\GH@ShowPath}{\GH@ShowPath[]}}
\def\GH@ShowPath[#1]#2{
\pgfqkeys{/GHShowPath}{#1}
\draw[#1] #2 -- cycle;
}
\def\GHShowClipPath{\pgfutil@ifnextchar[{\GH@ShowClipPath}{%
\GH@ShowClipPath[]}}
\def\GH@ShowClipPath[#1]#2{
\pgfqkeys{/GHShowPath}{#1}
\clip #2 -- cycle;
\node[anchor = south west,
inner sep = 0](GHimage){%
\includegraphics[width=12cm]{\GHClipImage}};
}
\newif\ifanchor@show\anchor@showfalse
\pgfkeys{GHAnchor/.cd,
color/.code = \def\GH@anchor@col{#1},
radius/.code = \def\GH@anchor@rad{#1},
show/.is if = anchor@show,
show/.default = true}
\def\GHAnchor{\pgfutil@ifnextchar[{\GH@Anchor}{\GH@Anchor[]}}
\def\GH@Anchor[#1] at (#2,#3)#4{%
\pgfkeys{/GHAnchor/.cd,
color = gray,
radius = 2pt,
show = false}
\pgfqkeys{/GHAnchor}{#1}
\coordinate (#4) at (#2,#3);
\ifanchor@show\fill[\GH@anchor@col] (#4) circle [radius=\GH@anchor@rad];\fi
}%
\pgfkeys{GHShowGrid/.cd,
color/.code = \def\GH@grid@col{#1},
space/.code = \def\GH@grid@space{#1},
step/.code = \def\GH@grid@step{#1},
precision/.code = \def\GH@grid@precision{#1},
}%
\def\GHShowGrid{\pgfutil@ifnextchar[{\GH@ShowGrid}{\GH@ShowGrid[]}}
\def\GH@ShowGrid[#1]{%
\pgfkeys{/GHShowGrid/.cd,
color = lightgray,
space = 0.04,
step=0.1,
precision = 1}
\pgfqkeys{/GHShowGrid}{#1}
\foreach \x in {0,\GH@grid@step,...,1.001}{%
\draw[\GH@grid@col] (0,\x) ++(-\GH@grid@space,0) node[left]{%
\pgfmathprintnumber[fixed,fixed zerofill,precision=\GH@grid@precision]
{\x}} -- (1,\x);
\draw[\GH@grid@col] (\x,0) ++(0,-\GH@grid@space)node[rotate=90,left]{%
\pgfmathprintnumber[fixed,fixed zerofill,precision=\GH@grid@precision]
{\x}} -- (\x,1);}}
\pgfkeys{GHspy/.cd,
color/.code = \def\GH@anchor@col{#1},
}
\def\GHspy#1#2(#3,#4){%
\spy on (#1) in node at ([shift={(#3,#4)}]GHimage.#2);
}
\makeatother
\begin{document}
\begin{tikzpicture}
\tikzset{spy style/.style={spy using outlines={circle, magnification=4, size=3cm, connect spies}}}
\begin{IncludeGH}[12cm]{champignon.jpeg}
\GHShowGrid[color=lightgray,step=.1,precision=1]
\GHAnchor[color=red,radius=2pt,show] at (0.5,0.5){milieu}
\GHShowDetail[shape=circle,color=red,width=.2] at (0.25,0.5){cercle}
\GHShowDetail[shape=rectangle,width=.1,height=.1] at (0.7,0.7){rec}
\GHspy{cercle}{south}(-4,-3)
\GHShowPath[ultra thick,red]{(0.5,0.75) -- (0.90,0.75) -- (0.90,0.5) .. controls (0.8,-0.2) and (0.65,0.2) .. (0.5,0.3)}
\end{IncludeGH}
\end{tikzpicture}
\begin{tikzpicture}
\begin{IncludeClipGH}[12cm]{champignon.jpeg}
\GHShowClipPath[red]{(0.5,0.75) -- (0.90,0.75) --
(0.90,0.5) .. controls (0.8,-0.2) and (0.65,0.2) .. (0.5,0.3)}
\end{IncludeClipGH}
\end{tikzpicture}
\end{document}
