图像分割-10.2.1点--.3线检测

点检测(拉普拉斯模板)


线检测模板

水平 +垂直 -


原图:


拉普拉斯:


+


-


水平


竖直:(结果是这样,不知道为什么)



程序代码:

#include<iostream>
#include"opencv.hpp"

using namespace cv;
using namespace std;
#define N 3

#ifdef _DEBUG
#pragma comment(lib,"opencv_core2413d.lib")
#pragma comment(lib,"opencv_imgproc2413d.lib")
#pragma comment(lib,"opencv_highgui2413d.lib")
#pragma comment(lib,"opencv_features2d2413d.lib")
#pragma comment(lib,"opencv_calib3d2413.lib")
#else
#pragma comment(lib,"opencv_core2413.lib")
#pragma comment(lib,"opencv_imgproc2413.lib")
#pragma comment(lib,"opencv_highgui2413.lib")
#pragma comment(lib,"opencv_features2d2413.lib")
#pragma comment(lib,"opencv_calib3d2413.lib")
#endif

int main(){
	//Mat src = imread("Fig1001(a)(constant_gray_region).tif", 0);
	//Mat src = imread("Fig1001(d)(noisy_region).tif", 0);
	//Mat src = imread("Fig1004(b)(turbine_blade_black_dot).tif", 0);Fig1007(a)(wirebond_mask).tif
	Mat src = imread("Fig1007(a)(wirebond_mask).tif", 0); 
	if (!src.data){
		cout << "error src image" << endl;
	}
	if (src.channels() != 1){
		cvtColor(src, src, CV_BGR2HLS);
	}
	Mat dst=Mat::zeros(src.rows,src.cols,CV_8UC1);
	//Laplacian(src, dst, dst.depth(), 3, 1, 0, BORDER_ISOLATED);
	//
	//imshow("la", dst);
	//waitKey();



	float sum = 0;
	float max = 0;
	Point a = (0, 0);
	Mat mask = Mat::ones(N, N, src.type());
	mask.at<uchar>(N/2, N/2) = -8;

	Mat mask1 = Mat::ones(N, N, src.type());
	for (int i = 0; i < N; i++){
		for (int j = 0; j < N; j++){
			mask1.at<uchar>(i, j) = -1;
		}
	}
	mask1.at<uchar>(0, 0) = 2;
	mask1.at<uchar>(1, 1) = 2;
	mask1.at<uchar>(2, 2) = 2;


	Mat mask2 = Mat::ones(N, N, src.type());
	for (int i = 0; i < N; i++){
		for (int j = 0; j < N; j++){
			mask2.at<uchar>(i, j) = -1;
		}
	}
	mask2.at<uchar>(0, 2) = 2;
	mask2.at<uchar>(1, 1) = 2;
	mask2.at<uchar>(2, 0) = 2;

	Mat mask3 = Mat::ones(N, N, src.type());
	for (int i = 0; i < N; i++){
		for (int j = 0; j < N; j++){
			mask3.at<uchar>(i, j) = -1;
		}
	}
	mask3.at<uchar>(1, 0) = 2;
	mask3.at<uchar>(1, 1) = 2;
	mask3.at<uchar>(1, 2) = 2;

	Mat mask4 = Mat::ones(N, N, src.type());
	for (int i = 0; i < N; i++){
		for (int j = 0; j < N; j++){
			mask4.at<uchar>(i, j) = -1;
		}
	}
	mask4.at<uchar>(0, 1) = 2;
	mask4.at<uchar>(1, 1) = 2;
	mask4.at<uchar>(2, 1) = 2;

	for (int i = N / 2; i < src.rows - N; i++){
		for (int j = N / 2; j < src.cols - N; j++){

			sum = 0;
			for (int m = -N/2; m < N/2+1; m++){
				for (int n = -N / 2; n < -N / 2+1; n++){
					sum += src.at<uchar>(i + m, j + n)*mask4.at<uchar>(m + N / 2, n+N / 2);
					
				}
			}
			if (abs(sum)>195075)
				cout << sum << endl;
			dst.at<uchar>(i, j) = abs(sum);
			
			
			//if (dst.at<uchar>(i, j) >max){
			//	max = dst.at<uchar>(i, j);
			//}
				

		}
	}

	//for (int i = 0; i < dst.rows; i++){
	//	for (int j = 0; j < dst.cols; j++){
	//		if (dst.at<uchar>(i, j)>max*0.9){
	//			dst.at<uchar>(i,j) = 255;
	//			a.x = i;
	//			a.y = j;
	//		}
	//		else
	//			dst.at<uchar>(i,j)= 0;
	//	}
	//}

	//meanStdDev(src, dst, dev, mask);
	//threshold(src, dst, 200, 255, THRESH_BINARY);
	cout << a << endl;
	imshow("dst", dst);
	waitKey();
	return 0;
}

参考文献:

冈萨雷斯 数字图像处理 第三版

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值