m0_70781979 2024-01-08 16:19 采纳率: 0%
浏览 5

元素全是由1和-1随机组成的方阵,Matlab代码

请问元素全是由1和-1随机组成的矩阵,Matlab代码怎么表示啊,,。。

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2024-01-08 19:11
    关注

    【相关推荐】



    • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7522371
    • 这篇博客也不错, 你可以看下基于遗传算法的微电网运行优化的MATLAB代码,目标函数为运行成本之和最小,注释详细。
    • 您还可以看一下 硬核野生技术咨询客服小李老师的十天精通matlab神经网络案例实战篇课程中的 彻底精通BP神经网络第三部分小节, 巩固相关知识点
    • 除此之外, 这篇博客: 图像的边缘检测和缺失修复(附matlab代码)中的 1. 清晰图片的边缘检测 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

        1.1 5种边缘检测算子的对比

          其实每种不同的边缘检测算子都是有模板的,至于他们的模型和原理可以自行上网查找,在这里只对他们做一个效果对比。

      目前最流行的几种边缘检测有Roberts算子、Prewitt算子、Sobel算子、Canny算子和Log算子,这几种算子对图像的边缘提取都有着一定的应用,用他们对同一张比较简单的黑白图片进行边缘检测可以看出效果的不同,效果图如下:

                                          

          对比一下就不难发现,canny算子检测效果是明显高于其他几种算子的,保留的信息更多,其它算子对清晰的图片检测都这个diao样就更不用说模糊和加噪声的图片了,所以后面只采用Canny来提取。

      各算子具体的matlab代码:

      Canny算子:

      %Canny算子
      close all
      clear all
      clc
      I=imread('timg.jpg');   %导入路径下的图片
      U=I;
      I=rgb2gray(I);    %如果是灰度图片的话需要注释掉
      I=im2double(I);
      J=imnoise(I,'gaussian',0,0);
      [K,thresh]=edge(J,'canny');
      figure;
      subplot(121);imshow(U);
      xlabel('原图');
      subplot(122);imshow(K);
      xlabel('Canny检测');

      Roberts算子:

      clear all; close all;
      I=imread('rice.png');  %导入路径下的图片
      I=rgb2gray(I);    %如果是灰度图的话需要注释掉
      I=im2double(I);
      [J, thresh]=edge(I, 'roberts', 35/255);
      figure;
      subplot(121);  imshow(I);
      xlabel('原图');
      subplot(122);  imshow(J);
      xlabel('roberts检测');
      

      Prewitt算子:

      clear all; close all;
      I=imread('cameraman.tif');
      I=rgb2gray(I);
      I=im2double(I);
      [J, thresh]=edge(I, 'prewitt', [], 'both');
      figure;
      subplot(121);  imshow(I);
      xlabel('原图');
      subplot(122);  imshow(J);
      xlabel('Prewitt检测');

      Sobel算子:

      I=imread('gantrycrane.png');
      I=rgb2gray(I);
      I=im2double(I);
      [J, thresh]=edge(I, 'sobel', [], 'horizontal');
      figure;
      subplot(121);  imshow(I);
      xlabel('原图');
      subplot(122);  imshow(J);
      xlabel('Sobel检测');
      

      Log算子:

      I=imread('cameraman.tif');
      I=rgb2double(I);
      I=im2double(I);
      J=imnoise(I, 'gaussian', 0, 0.005);
      [K, thresh]=edge(J, 'log', [], 2.3);
      figure;
      subplot(121);  imshow(J);
      xlabel('原图');
      subplot(122);  imshow(K);
      xlabel('Log检测');

        1.2Canny算子边缘检测

           在这里对Canny的相关原理做个补充,Canny的原理其实还是很简单的,大致分为下面几步:

          Step1:使用高斯滤波对图像进行降噪处理;

          Step2:使用一阶偏导的有限差分来计算梯度的幅值和方向;

                     梯度幅值 M(x,y) 和梯度方向 \theta(x,y) 的计算公式如下:

                                                                          M(x,y)=\sqrt{E_{x}(x,y)^{2}+E_{y}(x,y)^{2}}

                                                                                 \theta (x,y)=arctan\frac{E_{y}(x,y)}{E_{x}(x,y)}

              其中,E_{x}(x,y)^E_{y}(x,y)分别为边缘通过点乘Sobel算子的到的不同方向梯度值,其计算公式如下:

                                                

          Step3:对梯度幅值进行非极大值抑制;

             由于在高斯滤波的过程中有将边缘宽度放大的可能,因此为使边缘宽度尽量为一个像素点,我们需要过滤非边缘点。若一个像素点属于边缘点,则此像素点在梯度方向上的梯度值最大,否则其灰度值为0。计算公式如下: 

                                                               

          Step4:使用双阈值算法检测和连接边缘。

              这是该算子最核心的一步,主要思想设置两类阈值,上阈值与下阈值。若梯度幅值小于下阈值,即认为是非边缘信息,将其排除(像素值设为0);若梯度幅值介于下阈值与上阈值之间,若该像素点和边缘相连则认为其是连续边缘的一部分,否则排除掉;若梯度幅值大于上阈值,则认为其是边缘。

             整个算法流程图如下:

                                  

             Canny对灰度图的检测效果还ok,那么Canny对彩色图片提取效果咋么样呢。。也进行了尝试,效果还算勉强,但是对于很复杂的彩色图片就不行了,简单的还是ok的,效果图如下:

                                                         

      有没有被香蕉君的笑容迷惑到 ,毕竟当代青年必须要在哲♂学中研究学习才有动力~

      然后8,其实我有个想法就是通过代码对某段视频的图像进行固定帧数的不断截取,然后不断进行边缘检测,把结果图搞成一个视频,这样子可以对视频进行不断的边缘检测了,,,,好想搞一个某鲲打篮球的线条效果hhh,有时间一定要尝试。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 1月8日