In[]:=
countries=CountryData["Countries"];​​flags=CountryData[#,"Flag"]&/@countries;​​colorLengths=Length@DominantColors[#]&/@flags;​​positions=Flatten@Position[colorLengths,_?(#==2&)];​​​​For[i=1,i<=Length[positions],i+=1,​​country=countries[[positions[[i]]]];​​flag=CountryData[country,"Flag"];​​​​m=ImageData@ColorNegate@Binarize@flag;​​colors=DominantColors[flag];​​{u,r,v}=SmithDecomposition[m];​​If[Total@Diagonal@r>10,Continue[]];​​Print["doing ",country," , ",Total@Diagonal@r>10];​​cr=ColorRules->Thread[{0,1}->colors];​​u=Inverse[u];v=Inverse[v];​​decomp=Sum[ArrayPlot[Dot[u[[All,{j}]],v[[{j}]]],cr],{j,Min[Total@Diagonal@r,9]}];​​​​Print[flag,"=",decomp];​​]​​
doing
Austria
, False
=
+
doing
Denmark
, False
=
+
doing
Finland
, False
=
+
doing
Georgia
, False
=
+
+
+
+
+
+
+
+
doing
Greece
, False
=
+
+
+
+
doing
Indonesia
, False
=
+
doing
Latvia
, False
=
+
doing
Micronesia
, False
=
+
doing
Monaco
, False
=
+
doing
Morocco
, False
=
+
doing
Nigeria
, False
=
+
doing
Poland
, False
=
+
doing
Sweden
, False
=
+
+
doing
Switzerland
, False
=
+
+
+
+
doing
Tonga
, False
=
+
+
+
doing
Ukraine
, False
=
+

Select country

In[]:=
countries={"Greece","Finland","Denmark","Switzerland","Tonga","Georgia"};​​For[i=1,i<=Length[countries],i+=1,​​country=countries[[i]];​​flag=CountryData[country,"Flag"];​​​​m=ImageData@ColorNegate@Binarize@flag;​​colors=DominantColors[flag];​​{u,r,v}=SmithDecomposition[m];​​If[Total@Diagonal@r>10,Continue[]];​​Print[country];​​cr=ColorRules->Thread[{0,1}->colors];​​u=Inverse[u];v=Inverse[v];​​decomp=Sum[ArrayPlot[Dot[u[[All,{j}]],v[[{j}]]],cr],{j,Min[Total@Diagonal@r,9]}];​​​​Print[flag,"=",decomp];​​]​​​​
Greece
=
+
+
+
+
Finland
=
+