My problem is that I have a surface of implied black volatilites that is supposed to represent market data. However, the surface contains some slight arbitrage. More precisely, the graph contains butterfly arbitrage for some strikes due to non-convexity of the discrete graph of call-option values. This arbitrage, obviously, causes problems in later mathematical procedures that requires no arbitrage.
So my question here is: Is it possible, in a not too time consuming and complicated way, "wash" the data from arbitrage? To find the closest arbitrage free surface in some way. Any references to articles about the subject would be appreciated.
(Not interested in references to Matlab/Mathematica or other premade functions/libraries/programs. I am interested in the mathematics behind the problem and implementing it myself if possible)