singleSeparation={{43,516,459,404,372,22,22,23,36,23,23,31,23,23,23,23,23,23,23,35},{23,23,44,46,45,32,24,23,23,25,23,31,23,24,23,23,23,30,23,39},{45,31,45,37,36,31,26,26,26,29,27,26,26,26,33,28,25,25,26,25},{30,29,47,41,36,30,29,29,29,29,29,33,29,29,43,29,30,29,29,29}};

boxPlot[data_,plotLabel_]:=BoxWhiskerChart[data,
"Outliers",
ChartLabels->{"3x3","5x5","7x7","9x9","41x41"},
FrameLabel->{"filter size","time [ms]"},
PlotLabel->plotLabel
];

boxPlotData[data_]:=Module[{min,max,quartiles,IQR,outlier,outlierLow,outlierHigh,stringData,stringOutliers},
min=Min/@data;
max=Max/@data;
quartiles=Quartiles[singleSeparation\[Transpose]]\[Transpose]//N;
IQR=quartiles[[3]]-quartiles[[1]];
outlierLow=Table[Select[
singleSeparation[[i]],
(#<quartiles[[1,i]]-IQR[[i]]*1.5)&
],{i,1,Length[min]}];
outlierHigh=outlier=Table[Select[
singleSeparation[[i]],
(#>quartiles[[3,i]]+IQR[[i]]*1.5)&
],{i,1,Length[min]}];
outlier=Table[Select[
singleSeparation[[i]],
(#>quartiles[[3,i]]+IQR[[i]]*1.5||#<quartiles[[1,i]]-IQR[[i]]*1.5)&
],{i,1,Length[min]}];

Do[
If[Length[outlierHigh[[i]]]≥1,
max[[i]]=quartiles[[3,i]]+1.5*IQR[[i]]
];
If[Length[outlierLow[[i]]]≥1,
min[[i]]=quartiles[[1,i]]-1.5*IQR[[i]]
];
,{i,1,Length[min]}];

stringData="var singleSeparation = "<>StringReplace[
ToString@Table[
{min[[i]],quartiles[[1,i]],quartiles[[2,i]],quartiles[[3,i]],max[[i]]},
{i,1,Length[min]}],
{"{"->"[","}"->"]"}]<>";";
stringOutliers="var outliers = "<>StringReplace[
ToString@Flatten[
Table[Table[{i-1,outlier[[i,j]]},{j,1,Length[outlier[[i]]]}],{i,1,Length[min]}],
1],
{"{"->"[","}"->"]"}]<>";";

stringData<>"\n"<>stringOutliers
];

boxPlotData[singleSeparation]

boxPlot[singleSeparation,"Single separation"]

Table[Round[255*List@@ColorData[97,"ColorList"][[i]]],{i,1,6}]