我正在使用html5画布来去除红眼效果。我用tracking.js追踪眼睛。检查以下代码。
<!-- Include tracking js libraries -->
<script src="js/tracking-min.js"></script>
<script src="js/eye-min.js"></script>
<img id="sourceImg" src="red_eye1.jpg" width="202" height="187">
<canvas id="myCanvas" width="202" height="187" style="border:1px solid #d3d3d3;"></canvas>Javascript
document.getElementById("sourceImg").onload = function() {
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var img = document.getElementById("sourceImg");
ctx.drawImage(img, 0, 0);
// track eyes
var tracker = new tracking.ObjectTracker(['eye']);
tracker.setStepSize(1.7);
tracking.track('#sourceImg', tracker);
tracker.on('track', function(event) {
event.data.forEach(function(rect) {
// rect consists area of each eyes.
var imgData = ctx.getImageData(rect.x, rect.y, rect.width, rect.height);
// remove red eye
var i;
for (i = 0; i < imgData.data.length; i += 4) {
// find and check red intensity
var redIntensity = (imgData.data[i] / ((imgData.data[i+1] + imgData.data[i+2]) / 2));
if (redIntensity > 1.5) // 1.5 because it gives the best results
{
// reduce red to the average of blue and green
imgData.data[i] = (imgData.data[i+1] + imgData.data[i+2]) / 2;
}
}
ctx.putImageData(imgData, rect.x, rect.y);
});
});
};我得到了以下结果。

在这里,红眼成功地移除了。但它会影响眼睛周围的颜色。因为tracking.js返回了眼睛区域,包括周围的区域。如何跟踪眼球,这将解决这个问题。
发布于 2015-03-10 08:03:26
快速查看一下TrackingJS就会发现,它并不能将你的红边“眼睛区域”细化成虹膜。
因此,您将不得不找到一个跟踪应用程序,确实提供这种精化或代码完善自己。
推荐一个虹膜跟踪库是非主题的堆栈溢出和代码答案,它的虹膜跟踪是太广泛的资格作为一个良好的堆栈溢出答案。
说过,这是一个 verrrrrry 关于寻找虹膜的大致轮廓:
附加思想
我继续思考需要处理的许多非标准情况:
如果你的项目允许的话,如果用户点击两个瞳孔并扩大瞳孔半径来定义虹膜,那就容易多了。瞳孔可能比其他眼睛结构更暗,而且是圆形的(但可能被眼睑夹住)。
如果您的项目不允许用户选择瞳孔,您可以使用“边缘检测”算法来隔离瞳孔(可能是Sobel边缘检测)。
https://stackoverflow.com/questions/28957268
复制相似问题