add image cropping
This commit is contained in:
parent
0bf4fd2285
commit
0d09bb5e96
|
|
@ -680,6 +680,9 @@
|
||||||
var cap = new cv.VideoCapture(video);
|
var cap = new cv.VideoCapture(video);
|
||||||
let src = new cv.Mat(video.offsetHeight, video.offsetWidth, cv.CV_8UC4);
|
let src = new cv.Mat(video.offsetHeight, video.offsetWidth, cv.CV_8UC4);
|
||||||
let dst = new cv.Mat(video.offsetHeight, video.offsetWidth, cv.CV_8UC1);
|
let dst = new cv.Mat(video.offsetHeight, video.offsetWidth, cv.CV_8UC1);
|
||||||
|
let draw = new cv.Mat(video.offsetHeight, video.offsetWidth, cv.CV_8UC4);
|
||||||
|
|
||||||
|
|
||||||
var rects_old_frame = [];
|
var rects_old_frame = [];
|
||||||
var objects_last = [];
|
var objects_last = [];
|
||||||
let contours = new cv.MatVector();
|
let contours = new cv.MatVector();
|
||||||
|
|
@ -692,16 +695,21 @@
|
||||||
|
|
||||||
function processVideo() {
|
function processVideo() {
|
||||||
cap.read(src);
|
cap.read(src);
|
||||||
|
cap.read(draw);
|
||||||
framecount+=1;
|
framecount+=1;
|
||||||
let objects_this = [];
|
let objects_this = [];
|
||||||
let fits = [];
|
let fits = [];
|
||||||
let rects = [];
|
let rects = [];
|
||||||
|
let areas = [];
|
||||||
|
let cropped_image = [];
|
||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (!streaming) {
|
if (!streaming) {
|
||||||
// clean and stop.
|
// clean and stop.
|
||||||
src.delete();
|
src.delete();
|
||||||
dst.delete();
|
dst.delete();
|
||||||
|
draw.delete();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -719,23 +727,42 @@
|
||||||
if (cv.contourArea(cnt) < 1000){
|
if (cv.contourArea(cnt) < 1000){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// get the bounding rect of the contour
|
// get the bounding rect of the contour
|
||||||
let rect = cv.boundingRect(cnt);
|
let rect = cv.boundingRect(cnt);
|
||||||
|
//let rect = cv.minAreaRect(cnt)
|
||||||
|
|
||||||
|
let cropped_ref = src.roi(rect);
|
||||||
// prepare an array for fitnes values
|
// prepare an array for fitnes values
|
||||||
rects.push(rect);
|
rects.push(rect);
|
||||||
|
let sample = new cv.Mat(rect.height, rect.width, cv.CV_8UC4);
|
||||||
|
cropped_ref.copyTo(sample);
|
||||||
|
cropped_image.push(sample);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
let area = cv.contourArea(cnt);
|
||||||
|
let s = src.size();
|
||||||
|
s = microscope_setup.FoV_Width / s.width;
|
||||||
|
areas.push(area*Math.pow(s,2));
|
||||||
|
|
||||||
let rectangleColor = new cv.Scalar(255, 0, 255,255);
|
let rectangleColor = new cv.Scalar(255, 0, 255,255);
|
||||||
let point1 = new cv.Point(rect.x, rect.y);
|
let point1 = new cv.Point(rect.x, rect.y);
|
||||||
let point2 = new cv.Point(rect.x + rect.width, rect.y + rect.height);
|
let point2 = new cv.Point(rect.x + rect.width, rect.y + rect.height);
|
||||||
cv.rectangle(src, point1, point2, rectangleColor, 2, cv.LINE_AA, 0);
|
//box = cv.boxPoints(rect);
|
||||||
|
//box = np.int0(box);
|
||||||
// get all fitness values for this rect.
|
cv.rectangle(draw, point1, point2, rectangleColor, 2, cv.LINE_AA, 0);
|
||||||
|
//cv.drawContours(draw,[box],0,rectangleColor,2);
|
||||||
|
//console.log(rect);
|
||||||
|
// get all fitness values for this rect. first for already tracked rects
|
||||||
for (let k = 0; k < objects_tracked.length; ++k){
|
for (let k = 0; k < objects_tracked.length; ++k){
|
||||||
if (objects_tracked[k].at(-1)[0] == framecount-1){
|
if (objects_tracked[k].at(-1)[0] == framecount-1){
|
||||||
fits.push([k, 'NaN', rects.length-1, fit(objects_tracked[k].at(-1)[1], rect)]);
|
fits.push([k, 'NaN', rects.length-1, fit(objects_tracked[k].at(-1)[1], rect)]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// get all fitness values for rects that have not been tracked.
|
||||||
for (let j = 0; j < objects_last.length; ++j){
|
for (let j = 0; j < objects_last.length; ++j){
|
||||||
fits.push(['NaN', j, rects.length-1, fit(objects_last[j], rect)]);
|
fits.push(['NaN', j, rects.length-1, fit(objects_last[j][1], rect)]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// sort fits array
|
// sort fits array
|
||||||
|
|
@ -756,12 +783,12 @@
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if (ind_new == 'NaN' && !(objects_tracked_handled.has(ind_tracked)) && !(rects_handled.has(ind_rect))){
|
else if (ind_new == 'NaN' && !(objects_tracked_handled.has(ind_tracked)) && !(rects_handled.has(ind_rect))){
|
||||||
objects_tracked[ind_tracked].push([framecount, rects[ind_rect]]);
|
objects_tracked[ind_tracked].push([framecount, rects[ind_rect], cropped_image[ind_rect], areas[ind_rect]]);
|
||||||
objects_tracked_handled.add(ind_tracked);
|
objects_tracked_handled.add(ind_tracked);
|
||||||
rects_handled.add(ind_rect);
|
rects_handled.add(ind_rect);
|
||||||
let rectangleColor = new cv.Scalar(255, 0, 255,255);
|
let rectangleColor = new cv.Scalar(255, 0, 255,255);
|
||||||
point1 = new cv.Point(rects[ind_rect].x, rects[ind_rect].y);
|
point1 = new cv.Point(rects[ind_rect].x, rects[ind_rect].y);
|
||||||
cv.putText(src, String(ind_tracked+objects_lost.length), point1, cv.FONT_HERSHEY_COMPLEX, 1, rectangleColor, 1, cv.LINE_8);
|
cv.putText(draw, String(ind_tracked), point1, cv.FONT_HERSHEY_COMPLEX, 1, rectangleColor, 1, cv.LINE_8);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -776,14 +803,15 @@
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if (ind_tracked == 'NaN' && !(objects_new_handled.has(ind_new)) && !(rects_handled.has(ind_rect))){
|
else if (ind_tracked == 'NaN' && !(objects_new_handled.has(ind_new)) && !(rects_handled.has(ind_rect))){
|
||||||
objects_tracked.push([[framecount-1, objects_last[ind_new]], [framecount, rects[ind_rect]]]);
|
objects_tracked.push([objects_last[ind_new], [framecount, rects[ind_rect], cropped_image[ind_rect], areas[ind_rect]]]);
|
||||||
|
add_organism_candidate(objects_last[ind_new], objects_tracked.length);
|
||||||
objects_new_handled.add(ind_new);
|
objects_new_handled.add(ind_new);
|
||||||
rects_handled.add(ind_rect);
|
rects_handled.add(ind_rect);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (let i = 0; i < rects.length; ++i){
|
for (let i = 0; i < rects.length; ++i){
|
||||||
if (!(rects_handled.has(i))) {
|
if (!(rects_handled.has(i))) {
|
||||||
objects_this.push(rects[i]);
|
objects_this.push([framecount, rects[i], cropped_image[i], areas[i]]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue