圖像處理——基於深度學習HED實現目標邊緣檢測

前言

使用傳統的圖像來檢測目標邊緣,受到干擾的因素太多了,而已魯棒性不高,同樣的參數,在這個環境下可以,換個環境就根本檢測不到物體的邊緣,或者把不是邊緣的也檢測進去了。ICCV2015有人提出了整體嵌套邊緣檢測,就通過深度學習模型執行圖像到圖像的預測。論文地址:https://arxiv.org/abs/1504.06375,github上的工程:https://github.com/s9xie/hed。這裏我使用opencv dnn與c++演示hed邊緣檢測的效果。

HED邊緣檢測

1.檢測代碼

void edgeDetection(cv::Mat &src,cv::Mat &dst,double threshold)
{
	CV_DNN_REGISTER_LAYER_CLASS(Crop, CropLayer);
	cv::Mat img = src.clone();
	cv::Size reso(500, 500);
	cv::Mat blob = cv::dnn::blobFromImage(img, threshold, reso, cv::Scalar(104.00698793, 116.66876762, 122.67891434), false, false);
	cv::dnn::Net net = cv::dnn::readNet("model/deploy.prototxt", "model/hed.caffemodel");
	net.setInput(blob);
	cv::Mat out = net.forward();
	cv::resize(out.reshape(1, reso.height), out, img.size());
	cv::Mat out2;
	out.convertTo(dst, CV_8UC3, 255);
}


int main(void)
{
	cv::Mat src = cv::imread("1.jpg");
	cv::namedWindow("原圖", 0);
	cv::imshow("原圖", src);

	resize(src, src, cv::Size(500, 500));

	cv::Mat dst;
	edgeDetection(src, dst,2.2);
	cv::namedWindow("HED", 0);
	cv::imshow("HED", dst);

	cv::waitKey(0);

	return 0;
}

2.運行效果
在這裏插入圖片描述
在這裏插入圖片描述
官網效果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章