Halcon 极坐标转换图像

一、概述

先看效果

将圆形的用极坐标转换成矩性然后再进行识别或者其他缺陷检测,最后在还圆到原图中

二、原理:

halcon 圆环类缺陷检测的一种方法(极坐标变换法)_halcon缺口检测-CSDN博客

图像极坐标变换与反变换(Halcon + OpenCV)_将 环形虹膜图像的极坐标转换成矩形图像-CSDN博客

 极坐标转换: 圆形图像--》矩形图像   

原理:

三、实践

案例一



dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
read_image (Beer, '/tem.png')
get_image_size (Beer, Width, Height)
draw_circle (WindowHandle, Row1, Column1, Radius)
gen_circle (Circle, Row1, Column1, Radius)
reduce_domain (Beer, Circle, ImageReduced)
PI:=3.1415926
*WidthPolar := (OuterRadius - 5)*2*3.14
W:=(Radius-150)*2*3.14
H:=300
*逆时针,从0度到360度,转一圈
*                        原始图像     极坐标之后的图像   图像中心坐标row col  起始角度 终止角度  开始半径 结束半径                   差值方式
polar_trans_image_ext (ImageReduced, PolarTransImage,  Row1,  Column1,      0,      2*PI,     0,     Radius*2,   W, H, 'bilinear')

dev_display (ImageZoomed)
*长和宽必须是原图像的长和宽,否则尺寸太小的话,图像容易超出,导致一片黑,看不到转换结果
*极坐标图像转笛卡尔坐标系图像  恢复之前的图像
polar_trans_image_inv (PolarTransImage, RestoreImage, Row1, Column1, 0, 2*PI, 0, Radius, Width, Height, 'bilinear')
write_image (RestoreImage, 'jpeg 100', 0, 'd:\\2.jpg')
 

*点坐标的转换
*Contour的原坐标是基于极坐标系,我们把它转到笛卡尔坐标系
gen_contour_polygon_xld (Contour, [155.568, 137.404, 30], [47.4712, 116.479, 260])
polar_trans_contour_xld_inv (Contour, XYTransContour, Row1, Column1, 0, 2*PI, 0, Radius, Width, Height, Width, Height)

 

 案例二、



dev_update_off ()
get_system ('clip_region', Information)
set_system ('clip_region', 'true')
read_image (Image, 'barcode.png')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width / 2, Height / 2, 'black', WindowHandle)
dev_set_colored (12)
dev_display (Image)
stop ()
* 分割包含条形码的CD上的环。
threshold (Image, Region, 0, 100)
closing_circle (Region, Region, 3.5)
connection (Region, ConnectedRegions)
*筛选出圆环
select_shape (ConnectedRegions, Ring, ['width','height'], 'and', [550,550], [750,750])
shape_trans (Ring, OuterCircle, 'outer_circle')
complement (Ring, RegionComplement)
connection (RegionComplement, ConnectedRegions)
select_shape (ConnectedRegions, InnerCircle, ['width','height'], 'and', [450,450], [650,650])
*提取并生成圆环区域外圆,内圆
* 确定包含条形码的环的参数。
smallest_circle (Ring, Row, Column, OuterRadius)
smallest_circle (InnerCircle, InnerRow, InnerColumn, InnerRadius)
dev_set_color ('green')
dev_set_draw ('margin')
dev_set_line_width (3)
dev_display (Image)
dev_display (OuterCircle)
dev_display (InnerCircle)
stop ()
* 现在读条形码。这是通过计算包含条形码的图像中圆环的极坐标变换来实现的。
* WidthPolar := 1440
*内圆的周长
WidthPolar := (OuterRadius - 5)*2*3.14
HeightPolar := round(OuterRadius - InnerRadius - 10)
*极坐标变换(中心Row, Column,用圆环的圆心坐标。起始角度是0到360度。起始半径分别是圆环内圆的半径和外圆的半径。
*宽高分别是圆环外圆的周长和外圆半径减去内圆半径的值)
polar_trans_image_ext (Image, PolarTransImage, Row, Column,0, rad(360), InnerRadius + 5, OuterRadius - 5, WidthPolar, HeightPolar, 'bilinear')
*逆向转换回圆环图像,以查看此函数效果
polar_trans_image_inv (PolarTransImage, XYTransImage, Row, Column, 0, rad(360), InnerRadius + 5, OuterRadius - 5,  Width, Height, 'nearest_neighbor')
invert_image (PolarTransImage, ImageInvert)
* 由于条形码区域相当平坦,因此图像的高度增加了一倍。
zoom_image_factor (ImageInvert, ImageZoomed, 1, 2, 'weighted')
get_image_size (ImageZoomed, Width1, Height1)
dev_resize_window_fit_size (0, 0, Width1, Height1, -1, -1)
dev_display (ImageZoomed)
stop()
create_bar_code_model ([], [], BarCodeHandle)
* 条形比较小,对比度也低;因此,阈值从0.05提高到0.1。
set_bar_code_param (BarCodeHandle, 'element_size_min', 1.5)
set_bar_code_param (BarCodeHandle, 'meas_thresh', 0.3)
find_bar_code (ImageZoomed, SymbolRegions, BarCodeHandle, 'Code 128', DecodedDataStrings)
clear_bar_code_model (BarCodeHandle)
dev_set_window_extents (-1, -1, WidthPolar / 2, HeightPolar)
dev_display (ImageZoomed)
dev_display (SymbolRegions)
set_system ('clip_region', Information)
disp_message (WindowHandle, DecodedDataStrings, 'image', 10, 180, 'black', 'true')
stop ()

* 主要是要显示到原来的那个区域
* 将条码区域转换回原始图像并显示。
zoom_region (SymbolRegions, SymbolRegions, 1, 0.5)
polar_trans_region_inv (SymbolRegions, CodeRegionCircular, Row, Column, 0, rad(360), InnerRadius + 5, OuterRadius - 5, WidthPolar, HeightPolar, Width, Height, 'nearest_neighbor')
dev_set_window_extents (-1, -1, Width / 2, Height / 2)
dev_display (Image)
dev_display (CodeRegionCircular)
disp_message (WindowHandle, DecodedDataStrings, 'window', 12, 12, 'black', 'true')




 案例三



* 
* tuning parameters
SmoothX := 501
ThresholdOffset := 25
MinDefectSize := 50
* 
* initialization
PolarResolution := 640
RingSize := 70
get_system ('store_empty_region', StoreEmptyRegion)
set_system ('store_empty_region', 'false')
read_image (Image, 'bottles/bottle_mouth_01')
dev_update_off ()
dev_close_window ()
dev_close_window ()
dev_open_window_fit_image (Image, 0, 0, 640, 512, WindowHandle1)
set_display_font (WindowHandle1, 16, 'mono', 'true', 'false')
dev_display (Image)
dev_set_draw ('margin')
dev_set_line_width (3)
dev_open_window_fit_size (0, 648, RingSize, PolarResolution, 150, 512, WindowHandle)
dev_set_draw ('margin')
dev_set_line_width (3)
dev_set_color ('red')
* 
* Main loop
* 
* Detect defects in bottle necks
for Index := 1 to 16 by 1
    read_image (Image, 'bottles/bottle_mouth_' + Index$'.02')
    * 
    * Part 1: 使用blob 分析将外部圆找出来
    auto_threshold (Image, Regions, 2)
    select_obj (Regions, DarkRegion, 1)
    opening_circle (DarkRegion, RegionOpening, 3.5)
    closing_circle (RegionOpening, RegionClosing, 25.5)
    fill_up (RegionClosing, RegionFillUp)
    boundary (RegionFillUp, RegionBorder, 'outer')
    dilation_circle (RegionBorder, RegionDilation, 3.5)
    reduce_domain (Image, RegionDilation, ImageReduced)
    * 
    * 使用边缘亚像素来找轮廓  并拟合圆
    edges_sub_pix (ImageReduced, Edges, 'canny', 0.5, 20, 40)
    segment_contours_xld (Edges, ContoursSplit, 'lines_circles', 5, 4, 2)
    union_cocircular_contours_xld (ContoursSplit, UnionContours, 0.9, 0.5, 0.5, 200, 50, 50, 'true', 1)
    length_xld (UnionContours, Length)
    select_obj (UnionContours, LongestContour, sort_index(Length)[|Length| - 1] + 1)
    fit_circle_contour_xld (LongestContour, 'ahuber', -1, 0, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)
    * 
    * Part 2: 极坐标转换
    gen_circle (Circle, Row, Column, Radius)
    dilation_circle (Circle, RegionDilation, 5)
    erosion_circle (Circle, RegionErosion, RingSize - 5)
    difference (RegionDilation, RegionErosion, RegionDifference)
    reduce_domain (Image, RegionDifference, ImageReduced)
    polar_trans_image_ext (ImageReduced, ImagePolar, Row, Column, 0, rad(360), Radius - RingSize, Radius, PolarResolution, RingSize, 'nearest_neighbor')
    * 
    * Part 3:检测是否有缺陷
    scale_image_max (ImagePolar, ImageScaleMax)
    mean_image (ImageScaleMax, ImageMean, SmoothX, 3)
    *原图区域-均值后的区域  =有差异的区域
    dyn_threshold (ImageScaleMax, ImageMean, Regions1, 55, 'not_equal')
    connection (Regions1, Connection)
    select_shape (Connection, SelectedRegions, 'height', 'and', 9, 99999)
    * ignore noise regions
    closing_rectangle1 (SelectedRegions, RegionClosing1, 10, 20)
    union1 (RegionClosing1, RegionUnion)
    * re-transform defect regions for visualization
    polar_trans_region_inv (RegionUnion, XYTransRegion, Row, Column, 0, rad(360), Radius - RingSize, Radius, PolarResolution, RingSize, 1280, 1024, 'nearest_neighbor')
    * 
    * Part 4: Display results
    * display original image with results
    dev_set_window (WindowHandle1)
    dev_display (Image)
    dev_set_color ('blue')
    dev_display (RegionDifference)
    dev_set_color ('red')
    dev_display (XYTransRegion)
    * display polar transformed inspected region with results
    * The image and resulting region are rotated by 90 degrees
    * only for visualization purposes! (I.e. to fit better on the screen)
    * The rotation is NOT necessary for the detection algorithm.
    dev_set_window (WindowHandle)
    
    *旋转图像
    rotate_image (ImagePolar, ImageRotate, 90, 'constant')
    dev_display (ImageRotate)
    count_obj (RegionUnion, Number)
    if (Number > 0)
        mirror_region (RegionUnion, RegionMirror, 'diagonal', PolarResolution)
        mirror_region (RegionMirror, RegionMirror, 'row', PolarResolution)
        dev_display (RegionMirror)
        disp_message (WindowHandle1, 'Not OK', 'window', 12, 12, 'red', 'false')
    else
        disp_message (WindowHandle1, 'OK', 'window', 12, 12, 'forest green', 'false')
    endif
    if (Index < 16)
        disp_continue_message (WindowHandle1, 'black', 'true')
        stop ()
    endif
endfor
* Reset system parameters
set_system ('store_empty_region', StoreEmptyRegion)

案例四

https://blog.csdn.net/cashmood/article/details/104709546

ead_image (Image, '1.png') 
rgb3_to_gray (Image, Image, Image, ImageGray) 
dev_open_window_fit_image (ImageGray, 0, 0, -1, -1, WindowHandle) 
dev_set_draw ('margin') 
dev_set_line_width (3) 
dev_set_draw ('margin') 
* dev_set_draw ('fill') 
get_image_size (ImageGray, Width, Height) 
binary_threshold (ImageGray, Region, 'max_separability', 'dark', UsedThreshold) 
connection (Region, ConnectedRegions) 
select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70) 

* 计算最外测圆的直径
smallest_circle (SelectedRegions, Row2, Column2, Radius) 
gen_circle (Circle, Row2, Column2, Radius) 
reduce_domain (ImageGray, Circle, ImageReduced2) 
gray_closing_rect (ImageReduced2, ImageClosing1, 10, 4) 
*极坐标转换  
polar_trans_image_ext (ImageClosing1, PolarTransImage1, Row2, Column2, 0, 6.28319, Radius-100, Radius-10, 6.28*Radius, 90, 'nearest_neighbor') 


mean_image (PolarTransImage1, ImageMean1, 500, 2) 
dyn_threshold (PolarTransImage1, ImageMean1, RegionDynThresh1, 7, 'dark') 
connection (RegionDynThresh1, ConnectedRegions1) 
select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and',100, 9000000) 
union1 (SelectedRegions1, RegionUnion) 
closing_rectangle1 (RegionUnion, RegionClosing1, 10, 20) 
connection (RegionClosing1, ConnectedRegions3) 

opening_rectangle1 (ConnectedRegions3, RegionOpening1, 10, 20) 

* 将区域还原到原图上
polar_trans_region_inv (RegionOpening1, XYTransRegion1, Row2, Column2, 0, 6.28319, Radius-100, Radius-10, 6.28*Radius, 90, Width, Height, 'nearest_neighbor') 
smallest_circle (XYTransRegion1, Row, Column, Radius1) 
gen_circle (Circle1, Row, Column, Radius1) 
dev_display (ImageGray) 
dev_display (Circle1)

五、Opencv :

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main() {
    Mat img = imread("rainbow.png");
    if (!img.data) {
        cout << "请检查图像文件名称是否正确" << endl;
        return -1;
    }

    Mat   img1, img2;
    Point center = Point(img.cols / 2, img.rows / 2); //极坐标在图像中的原点
    //正极坐标变换->方变圆
    warpPolar(img, img1, Size(512, 512), center, center.x, WARP_POLAR_LINEAR);

    //逆极坐标变换->圆变方
    warpPolar(img1,img2,Size(img.rows,img.cols),center,center.x,WARP_INVERSE_MAP);
    imshow("Original", img);
    imshow("Anti Polar Result", img2);
    imshow("Polar Result", img1);
    waitKey(0);
    return 0;
}

图像极坐标变换与反变换(Halcon + OpenCV)_将 环形虹膜图像的极坐标转换成矩形图像-CSDN博客 

//
// Created by zzl on 2020/12/20.
//

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

using namespace std;
using namespace cv;

// 矩形图像转圆形
Mat Rectangle_to_Circle(const Mat &src, int Width);

Mat Circle_to_Rectangle(const Mat &src);

uchar getPixel(const Mat &src, double X, int X_up, int X_down, double Y, int Y_up, int Y_down);

int main(int argc, char **argv) {
    // 读入图像
    Mat src, dst;
    src = imread("/home/zzl/Blog/CoordinateTrans/Data/testimage4.jpg", 0);

    namedWindow("InputImages", WINDOW_NORMAL);
    imshow("InputImages", src);

    dst = Rectangle_to_Circle(src, 2 * src.rows);
    namedWindow("OutputImages", WINDOW_NORMAL);
    imshow("OutputImages", dst);

    Mat dst2;
    dst2 = Circle_to_Rectangle(dst);
    namedWindow("OutputImages2", WINDOW_FREERATIO);
    imshow("OutputImages2", dst2);



    cout << "Hello World" << endl;
    waitKey();
    return 0;
}

Mat Rectangle_to_Circle(const Mat &src, int Width) {

    int src_height = src.rows;
    int src_width = src.cols;

    Size dstSize = Size(2 * src_height, 2 * src_height);
    Mat dst = Mat::zeros(dstSize, CV_8UC1);
    // 极坐标变换
    double scale_r = 2 * src_height / (dstSize.width);
    double scale_theta = src_width / CV_2PI;
    Mat tmp = Mat::zeros(dst.size(), CV_64FC1);
    for (int i = 0; i < dstSize.height; ++i) {
        for (int j = 0; j < dstSize.width; ++j) {
            // 计算距离
            Point2d center(dstSize.width / 2, dstSize.width / 2);
            double distance = sqrt(pow(i - center.y, 2) + pow(j - center.x, 2));
//            tmp.at<double>(j, i) = distance;
            if (distance < dstSize.width / 2) {
                // 处于边界内部的点,可以提取像素
                // 坐标变换求对应方图上的点的坐标
                double Rec_Y = distance * scale_r; //Y 方向坐标
                if (Rec_Y < 0) {
                    Rec_Y = 0;
                }
                if (Rec_Y > dstSize.width / 2) {
                    Rec_Y = dstSize.width / 2;
                }
                double line_theta = atan2(i - center.y, j - center.x);
                if (line_theta < 0) {
                    line_theta += CV_2PI;
                }
                if (line_theta < 0) {
                    cout << "仍然小于0" << endl;
                }
                double Rec_X = line_theta * scale_theta;
                dst.at<uchar>(i, j) = src.at<uchar>((int) Rec_Y, (int) Rec_X);
            }
        }
    }
    // ---- 显示图像边界距离
//    normalize(tmp, tmp, 0, 1, NORM_MINMAX);
//    Mat display;
//    tmp.convertTo(display, CV_8UC1, 255.0);
//
//    namedWindow("Distance", WINDOW_NORMAL);
//    imshow("Distance", display);
//    waitKey();
//    circle(display, Point2d(Width / 2, Width / 2), Width / 2, 0, 10, LINE_8);
//    imshow("Distance", display);
//    waitKey();


    return dst;
}

Mat Circle_to_Rectangle(const Mat &src) {
    // 变换不同的图像大小有不同的效果
    Mat dst = Mat::zeros(Size((int) (src.cols * CV_PI) + 1, src.cols / 2 + 1), CV_8UC1);
//    Mat dst = Mat::zeros(Size(src.cols / 2 + 1, src.cols / 2 + 1), CV_8UC1);
    double scale_r = src.cols / (dst.rows);
    double scale_theta = 2 * CV_PI / dst.cols;
    for (int i = 0; i < dst.cols; ++i) {
        double theta = i * scale_theta;
        double sinTheta = sin(theta);
        double cosTheta = cos(theta);
        for (int j = 0; j < dst.rows; ++j) {
            double p = j * scale_r;
            double X = (src.rows / 2 + cosTheta * p);
            double Y = (src.cols / 2 + sinTheta * p);

            int X_up = ceil(X);
            int X_down = floor(X);
            int Y_up = ceil(Y);
            int Y_down = floor(Y);

            if (X > src.cols) {
                X = src.cols;
            }
            if (X < 0) {
                X = 0;
            }
            if (Y > src.rows) {
                Y = src.rows;
            }
            if (Y < 0) {
                Y = 0;
            }
            // 若使用插值算法需要取消注释
//            uchar tmp_Pixel = getPixel(src, X, X_up, X_down, Y, Y_up, Y_down);
//            dst.at<uchar>(j, i) = tmp_Pixel;
            dst.at<uchar>(j, i) = src.at<uchar>(Y, X); // 最近邻算法
        }

    }
    return dst;
}

uchar getPixel(const Mat &src, double X, int X_up, int X_down, double Y, int Y_up, int Y_down) {
    // 插值算法
    // X 为水平方向坐标 X_up、X_down分别为向上向下取整后的值 Y同理
    double inter_val = 0;
    if (X_up == X_down && Y_up == Y_down) {
        inter_val = saturate_cast<uchar>(src.at<uchar>(Y_up, X_up));
    } else if (X_up == X_down) {
        inter_val = saturate_cast<uchar>((Y_up - Y) * src.at<uchar>(Y_up, X_up) +
                                         (Y - Y_down) * src.at<uchar>(Y_down, X_up));
    } else if (Y_up == Y_down) {
        inter_val = saturate_cast<uchar>((X_up - X) * src.at<uchar>(Y_up, X_up) +
                                         (X - X_down) * src.at<uchar>(Y_up, X_down));
    } else {
        double Y_tmp = saturate_cast<uchar>((X_up - X) * src.at<uchar>(Y_down, X_up) +
                                        (X - X_down) * src.at<uchar>(Y_down, X_down));
        double X_tmp = saturate_cast<uchar>((X_up - X) * src.at<uchar>(Y_up, X_up) +
                                        (X - X_down) * src.at<uchar>(Y_up, X_down));
        inter_val = (Y_up - Y) * X_tmp + (Y - Y_down) * Y_tmp;
    }

    return (uchar) inter_val;
}



 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/641279.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

谈恋爱没经验?那就来刷谈恋爱经验宝宝吧

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。2022年度博客之星评选TOP 10&#x1f3c6;&#xff0c;Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作…

IDEA连接MySQL后如何管理数据库

上一节讲解了IDEA如何连接MySQL数据库管理系统&#xff0c;接下来我们就可以在IDEA里使用MySQL来管理数据库了。那么如果我们现在还没有创建需要的数据库怎么办&#xff1f;本节就来教大家如何在IDEA连接MySQL后管理数据库(创建/修改/删除数据库、创建/修改/删除表、插入/更新/…

SpringMVC笔记

一、SpringMVC 简介 1.1 什么是 MVC MVC 是一种软件架构的思想&#xff0c;将软件按照模型、视图、控制器来划分 1.M&#xff1a;Model 模型层&#xff0c;指工程中的 JavaBean &#xff0c;作用是处理数据 JavaBean 分为两类 实体类Bean&#xff1a;专门存储业务数据的…

在Visual Studio Code和Visual Studio 2022下配置Clang-Format,格式化成Google C++ Style

项目开发要求好的编写代码格式规范&#xff0c;常用的是根据Google C Style Guide 网上查了很多博文&#xff0c;都不太一样有的也跑不起来&#xff0c;通过尝试之后&#xff0c;自己可算折腾好了&#xff0c;整理一下过程 背景&#xff1a; 编译器主要有三部分&#xff1a;前…

最简单的 UDP-RTP 协议解析程序

最简单的 UDP-RTP 协议解析程序 最简单的 UDP-RTP 协议解析程序原理源程序结果下载链接参考 最简单的 UDP-RTP 协议解析程序 本文介绍网络协议数据的处理程序。网络协议数据在视频播放器中的位置如下所示。 本文中的程序是一个 UDP/RTP 协议流媒体数据解析器。该程序可以分析 …

路由_传递params参数和query参数

传递params参数 传递params参数可以直接在路径后面加上参数&#xff1a; 上述就是在路径变化的时候传过去三个值分别为哈哈、嘿嘿、呵呵的参数 但是这样的话会被认为三个参数是路径的一部分&#xff0c;计算机没有办法区分哪些是路径哪些是参数&#xff0c;所以首先要在这条路…

【新】snapd申请Let‘s Encrypt免费SSL证书、自动化续签证书

简介 之前写过一篇certbot申请SSL证书的文章&#xff1a;SSL证书申请&#xff0c;写得比较详细&#xff0c;但是最近发现使用snapd会更方便。 使用机器&#xff1a;Ubuntu 20.04 简单步骤 1、首先安装必要软件 sudo apt install snapd sudo apt install certbot sudo apt …

数据结构——顺序表基本操作的实现(初始化、取值、查找、插入)

一、线性表与顺序表的概述 线性表的数据元素的逻辑特征是线性的&#xff0c;是一种典型的线性结构。这样的结构可以借鉴数组&#xff0c;如数组a[10]中&#xff0c;a[1]前一定是a[0]&#xff0c;a[1]后一定是a[2]&#xff0c;首结点&#xff08;a[0]&#xff09;前面无元素&am…

基于springboot+vue的致远汽车租赁系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

如何用AI工具提升日常工作效率,帮我们提速增效减负

昨天&#xff0c;coze海外版支持了GPT4o&#xff0c; 立马体验了下&#xff0c;速度杠杠的。 https://www.coze.com 支持chatGP和gemini模型&#xff0c;需要科学上网。国内 https://www.coze.cn支持语雀、KIMI模型。 这里回到正题&#xff0c; 如何用AI工具提升日常工作效率…

对于高速信号完整性,一块聊聊啊(10)

本文包含的主要内容有: 过孔设计概述:从前面的各种基础知识到过孔设计,逐步对信号完整性有了初步了解,在过孔设计这里稍微做一个概述,也是个人的一些理解,算是一个小结。 过孔设计的必要性。 过孔结构的基础知识 实例:过孔设计仿真HFSS实例 过孔设计概述 通过前面…

2024年电工杯A题论文首发+摘要分享+问题一代码分享

问题一论文代码链接&#xff1a;https://pan.baidu.com/s/1kDV0DgSK3E4dv8Y6x7LExA 提取码&#xff1a;sxjm --来自百度网盘超级会员V5的分享 园区微电网风光储协调优化配置 摘要&#xff1a;园区微电网由风光发电和主电网联合为负荷供电&#xff0c;为了尽量提高风光电量的…

C# Sdcb.PaddleInference 中文分词、词性标注

C# Sdcb.PaddleInference 中文分词、词性标注 目录 效果 项目 代码 下载 参考 效果 项目 代码 using Sdcb.PaddleNLP.Lac; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Windows.Forms; namespace C__Sdcb.Pad…

文心智能体,零代码构建情感表达大师智能体

前言 随着智能体技术的突飞猛进&#xff0c;各行各业正迎来前所未有的变革与机遇。智能体&#xff0c;作为人工智能领域的重要分支&#xff0c;以其自主性、智能性和适应性&#xff0c;正逐步渗透到我们生活的每一个角落&#xff0c;成为推动社会进步和科技发展的新动力。 为了…

王炸! Coze图像流发布,我用它实现了海马体影楼级形象照(内附喂饭级教程

最近Coze图像流发布&#xff0c;我用它实现了海马体风格照片Bot: 照片魔术师。你可以自定义提供模版&#xff0c;也可以根据你的需求生成模版&#xff01; 这篇文章&#xff0c;全文不废话&#xff0c;只讲干货 二话不说&#xff0c;先来看看帅气的奥特曼怎么生成吧吧&#xff…

海外媒体发稿的关键步骤和投稿策略:如何撰写高质量的新闻稿?国外软文发布平台有哪些?

发布国外新闻稿件是一个涉及多步骤的过程&#xff0c;旨在确保您的新闻稿能够有效覆盖目标受众。以下是一些关键步骤和实用的技巧&#xff0c;帮助你实现海外媒体发稿。 1. 明确目标和受众 首先&#xff0c;明确您发布新闻稿的目标&#xff0c;是为了增加品牌曝光、推出新产品…

低利率之后如何选择?以日本养老金为例

天风证券认为&#xff0c;日本养老金资产配置行为具备的关键特征包括&#xff1a;海外资产占比上升、日元境内资产占比下降&#xff1b;权益类&#xff08;包括境内和境外&#xff09;占比上升&#xff0c;等等。 日本从1990年代开始陷入低增长、低通胀的局面&#xff0c;我们以…

十五、Python模块(入门一定看!!!)「长期更新Python简单入门到适用」

首先什么是模块&#xff1f; 小伙伴们经常看我写的教程不难发现&#xff0c;前面我们用过几次模块就是sys的那个&#xff0c;其实python不仅标准库中包含了大量的模块&#xff08;也被称之为准模块&#xff09;&#xff0c;还有大量的第三方模块&#xff0c;开发者也可以自己发…

如何成为成功的AI产品经理

本文目录 1 AI产品经理的角色和职责 2 AI产品经理的必备知识技能 3 案例分析 4 总结一下 随着ChatGPT的大热&#xff0c;也带动今年的AI火了一把&#xff0c;很多公司都开始进行相关部署&#xff0c;自然产生了很多岗位需求。 来源&#xff1a;BOSS直聘 那么&#xff0c;要想当…

Go语言的内存泄漏如何检测和避免?

文章目录 Go语言内存泄漏的检测与避免一、内存泄漏的检测1. 使用性能分析工具2. 使用内存泄漏检测工具3. 代码审查与测试 二、内存泄漏的避免1. 使用defer关键字2. 使用垃圾回收机制3. 避免循环引用4. 使用缓冲池 Go语言内存泄漏的检测与避免 在Go语言开发中&#xff0c;内存泄…