当前位置: 首页 > news >正文

免费网站建设协议做网站需要的知识

免费网站建设协议,做网站需要的知识,办营业执照要多少钱,微网站介绍文章目录 一、基于距离变换与分水岭的图像分割1、图像分割2、距离和变换与分水岭距离变换常见算法有两种分水岭变换常见的算法 3、距离变换API函数接口4、watershed 分水岭函数API接口步骤 5、代码 一、基于距离变换与分水岭的图像分割 1、图像分割 图像分割(Image Segmentat…

文章目录

  • 一、基于距离变换与分水岭的图像分割
    • 1、图像分割
    • 2、距离和变换与分水岭
      • 距离变换常见算法有两种
      • 分水岭变换常见的算法
    • 3、距离变换API函数接口
    • 4、watershed 分水岭函数API接口
      • 步骤
    • 5、代码

一、基于距离变换与分水岭的图像分割

1、图像分割

图像分割(Image Segmentation)是图像处理最重要的处理手段之一
图像分割的目标是将图像中像素根据一定的规则分为若干(N)个cluster集合,每个集合包含一类像素。
根据算法分为监督学习方法和无监督学习方法,图像分割的算法多数都是无监督学习方法 - KMeans

2、距离和变换与分水岭

距离变换常见算法有两种

1、不断膨胀/ 腐蚀得到
2、基于倒角距离

分水岭变换常见的算法

分水岭法(Meyer)是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局部极小值及其影响区域称为集水盆,而集水盆的边界则形成分水岭。该算法的实现可以模拟成洪水淹没的过程,图像的最低点首先被淹没,然后水逐渐淹没整个山谷。当水位到达一定高度的时候将会溢出,这时在水溢出的地方修建堤坝,重复这个过程直到整个图像上的点全部被淹没,这时所建立的一系列堤坝就成为分开各个盆地的分水岭。分水岭算法对微弱的边缘有着良好的响应,但图像中的噪声会使分水岭算法产生过分割的现象。
————————————————

基于浸泡理论实现

3、距离变换API函数接口

距离变换用于计算图像中每一个非零点像素与其周围最近的零点像素之间的距离,返回的值保存了每一个非零点与最近零点的距离信息;在图像上的体现为图像上越亮的点,代表了离零点的距离越远。

void distanceTransform( 
InputArray src,  
OutputArray dst,
OutputArray labels,
int distanceType,
int maskSize,
int labelType=DIST_LABEL_CCOMP
)

(1)src是单通道的8bit的二值图像(只有0或1)
(2)dst表示的是计算距离的输出图像,可以使单通道32bit浮点数据
(3)distanceType表示的是选取距离的类型,可以设置为
DIST_USER User defined distance
DIST_L1=1 distance = |x1-x2| + |y1-y2
DIST_L2 the simple euclidean distance
DIST_C distance = max(|x1-x2|,|y1-y2|)
DIST_L12 L1-L2 metric: distance =2(sqrt(1+x*x/2) - 1))
DIST_FAIR distance = c^2(|x|/c-log(1+|x|/c)),c = 1.3998
DIST_WELSCH distance = c2/2(1-exp(-(x/c)2)), c= 2.9846
DIST_HUBER distance = |x|<c ? x^2/2 :c(|x|-c/2), c=1.345
(4)maskSize表示的是距离变换的掩膜模板,可以设置为3,5或CV_DIST_MASK_PRECISE,对 CV_DIST_L1 或CV_DIST_C 的情况,参数值被强制设定为 3, 因为3×3 mask 给出5×5 mask 一样的结果,而且速度还更快。
DIST_MASK_3 mask=3
DIST_MASK_5 mask=5
DIST_MASK-PRECISE
(5)labels表示可选输出2维数组;
(6)labelType表示的是输出二维数组的类型,8位或者32位浮点数,图像是单一通道,并且大小与输入图像一致

4、watershed 分水岭函数API接口

void watershed( InputArray image, InputOutputArray markers );

参数说明

(1)参数 image,必须是一个8bit3通道彩色图像矩阵序列。
(2) 输入或输出32位单通道的标记,和图像一样大小。(输入高峰轮廓标记);在执行分水岭函数watershed之前,必须对第二个参数markers进行处理,它应该包含不同区域的轮廓,每个轮廓有一个自己唯一的编号,轮廓的定位可以通过Opencv中findContours方法实现,这个是执行分水岭之前的要求。

算法会根据markers传入的轮廓作为种子(也就是所谓的注水点),对图像上其他的像素点根据分水岭算法规则进行判断,并对每个像素点的区域归属进行划定,直到处理完图像上所有像素点。而区域与区域之间的分界处的值被置为“-1”,以做区分。


步骤

1、将白色背景变成黑色-目的是为后面的变换做准备
2、使用filter2D与拉普拉斯算子实现图像对比度提高,sharp(锐化)
3、转为二值图像通过threshold
4、距离变换
5、对距离变换结果进行归一化到[0~1]之间
6、使用阈值,再次二值化,得到标记
7、腐蚀得到每个Peak - erode
8、发现轮廓 – findContours
9、绘制轮廓- drawContours
10、分水岭变换 watershed
11、对每个分割区域着色输出结果
————————————————

5、代码

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>using namespace std;
using namespace cv;int main(int argc, char** argv) {char input_win[] = "input image";char watershed_win[] = "watershed segmentation demo";Mat src = imread("D:/vcprojects/images/cards.png");// Mat src = imread("D:/kuaidi.jpg");if (src.empty()) {printf("could not load image...\n");return -1;}namedWindow(input_win, CV_WINDOW_AUTOSIZE);imshow(input_win, src);// 1. change backgroundfor (int row = 0; row < src.rows; row++) {for (int col = 0; col < src.cols; col++) {if (src.at<Vec3b>(row, col) == Vec3b(255, 255, 255)) {src.at<Vec3b>(row, col)[0] = 0;src.at<Vec3b>(row, col)[1] = 0;src.at<Vec3b>(row, col)[2] = 0;}}}namedWindow("black background", CV_WINDOW_AUTOSIZE);imshow("black background", src);// sharpenMat kernel = (Mat_<float>(3, 3) << 1, 1, 1, 1, -8, 1, 1, 1, 1);Mat imgLaplance;Mat sharpenImg = src;filter2D(src, imgLaplance, CV_32F, kernel, Point(-1, -1), 0, BORDER_DEFAULT);src.convertTo(sharpenImg, CV_32F);Mat resultImg = sharpenImg - imgLaplance;resultImg.convertTo(resultImg, CV_8UC3);imgLaplance.convertTo(imgLaplance, CV_8UC3);imshow("sharpen image", resultImg);// src = resultImg; // copy back// convert to binaryMat binaryImg;cvtColor(src, resultImg, CV_BGR2GRAY);threshold(resultImg, binaryImg, 40, 255, THRESH_BINARY | THRESH_OTSU);imshow("binary image", binaryImg);Mat distImg;distanceTransform(binaryImg, distImg, DIST_L1, 3, 5);normalize(distImg, distImg, 0, 1, NORM_MINMAX);imshow("distance result", distImg);// binary againthreshold(distImg, distImg, .4, 1, THRESH_BINARY);Mat k1 = Mat::ones(13, 13, CV_8UC1);erode(distImg, distImg, k1, Point(-1, -1));imshow("distance binary image", distImg);// markers Mat dist_8u;distImg.convertTo(dist_8u, CV_8U);vector<vector<Point>> contours;findContours(dist_8u, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE, Point(0, 0));// create makersMat markers = Mat::zeros(src.size(), CV_32SC1);for (size_t i = 0; i < contours.size(); i++) {drawContours(markers, contours, static_cast<int>(i), Scalar::all(static_cast<int>(i) + 1), -1);}circle(markers, Point(5, 5), 3, Scalar(255, 255, 255), -1);imshow("my markers", markers*1000);// perform watershedwatershed(src, markers);Mat mark = Mat::zeros(markers.size(), CV_8UC1);markers.convertTo(mark, CV_8UC1);bitwise_not(mark, mark, Mat());imshow("watershed image", mark);// generate random colorvector<Vec3b> colors;for (size_t i = 0; i < contours.size(); i++) {int r = theRNG().uniform(0, 255);int g = theRNG().uniform(0, 255);int b = theRNG().uniform(0, 255);colors.push_back(Vec3b((uchar)b, (uchar)g, (uchar)r));}// fill with color and display final resultMat dst = Mat::zeros(markers.size(), CV_8UC3);for (int row = 0; row < markers.rows; row++) {for (int col = 0; col < markers.cols; col++) {int index = markers.at<int>(row, col);if (index > 0 && index <= static_cast<int>(contours.size())) {dst.at<Vec3b>(row, col) = colors[index - 1];}else {dst.at<Vec3b>(row, col) = Vec3b(0, 0, 0);}}}imshow("Final Result", dst);waitKey(0);return 0;
}

输入原图像和锐化图像
在这里插入图片描述

原图和黑背景图(背景应为黑色)
在这里插入图片描述

threshold转化的二值化图片和距离变换结果图
在这里插入图片描述

距离变换结果图和二值化图像
在这里插入图片描述

http://www.yayakq.cn/news/117711/

相关文章:

  • 枣庄做网站公司网站和微信 微网站解决方案
  • 网站设计论文分类号营销导向的企业网站建设步骤
  • 聊城有限公司网站建设 中企动力济二分cms建站步骤
  • 潍坊网站建设怎样网站开发算固定资产
  • 做租赁哪个网站好毕业设计代做网站价格
  • nginx 网站开发微小店网站建设官网
  • dedecms织梦系统网站防会员注册机网页美工设计的工作流程?
  • 西安高新网站制作专业的logo设计
  • 做游戏直播什么游戏视频网站好中国互联网协会理事长级别
  • 武义建设局网站seo如何优化网站推广
  • 防城港网站开发网站前端浏览器兼容如何做
  • 成品网站1688入门网怎么查看一个网站是哪家公司做的
  • 上哪儿找做网站韩国源代码交易网站
  • 好看的旅游网站模板下载戴尔小企业官网
  • 手机自建网站一级a做爰片了网站
  • 浙江坤宇建设有限公司网站图书购物网站开发总结
  • 东莞长安 网站建设wordpress忘记账号密码
  • 网站制作 网站建设怎么做的苏州吴江城乡和住房建设局网站
  • 建设商城网站视频教学wordpress电影影视主题公园
  • 大庆网站开发制作网站建设用电脑
  • 建设网站 程序员的提成网站建设培训证书
  • 杭州建平台网站公司东莞做购物网站
  • 天门网站定制长沙网站建设公司
  • 点胶喷嘴技术支持东莞网站建设付费推广
  • 以蓝色为主色调的网站优化网站seo
  • 网站搭建好之后提示网页走丢了腾讯wordpress
  • 织梦网站怎么重新安装教程活动列表 wordpress
  • 网站开发有什么软件2023年10月爆发新冠症状
  • 网站开发范例文档太原模板建站
  • 娄底网站建设企业如何在学校网站上做链接