基于matlab的亚像素的边缘检测技术

其中亚像素的边缘检测技术包含:

像素是成像面的基本单位也是最小单位,通常被称为图像的物理分辨率。

如果成像系统要显示的对象尺寸小于物理分辨率时,成像系统是无法正常辨识出来的实际上,亚像素细分算法是更近的结果,是两个物理像素之间的“像素”,这些更小的东西就称为“亚像素”。

灰度重心法

灰度重心法是对图像中标记点的明亮度进行对比,将标记点灰度分布中的重心点看作光条纹或光斑的中心点。

多项式插值法

多项式插值法是用插值函数近似模拟图像边缘过渡区域梯度的变化,根据亚像素原理计算边界点的坐标[8]。使用插值法来运算得到图像的梯度值,其中改变最明显的点就是边界点。

 

形心、重心的结果

 多项式差值

                                   

图 多项式差值得到的数据结果

Zemk结果 

 曲线拟合的结果

 这是进行曲线拟合得到的原始数据 并且得到结果。

像素边缘检测

 具体源程序见:基于matlab的亚像素的边缘检测技术-Matlab文档类资源-CSDN下载

如有侵权,请联系作者删除。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个基于Zernike矩的边缘检测MATLAB代码: ```matlab % 读取图像并转换为灰度图像 img = imread('example.jpg'); gray = rgb2gray(img); % 对图像进行高斯滤波 sigma = 1; hsize = 2*ceil(3*sigma)+1; h = fspecial('gaussian', hsize, sigma); gray_filtered = imfilter(gray, h, 'replicate'); % 计算图像的Zernike矩 n = 7; % 设置Zernike矩的阶数 m = 0; % 设置Zernike矩的次数 zernike = zeros(n+1, n+1); % 初始化Zernike矩矩阵 for i = 0:n for j = 0:n if (i-j) >= 0 && mod(i-j,2) == 0 zernike(i+1,j+1) = sum(sum(gray_filtered.*zernike_poly(j,i,gray_filtered))); end end end % 计算图像的边缘位置 edge_pos = zeros(size(gray_filtered)); for i = 1:size(gray_filtered,1) for j = 1:size(gray_filtered,2) if gray_filtered(i,j) > 50 % 阈值设为50 % 计算当前像的Zernike矩 zernike_i = zeros(n+1, n+1); for ii = 0:n for jj = 0:n if (ii-jj) >= 0 && mod(ii-jj,2) == 0 zernike_i(ii+1,jj+1) = sum(sum(gray_filtered.*zernike_poly(jj,ii,gray_filtered).*... (i.^(jj+1)).*((1:size(gray_filtered,2)).^(ii+1)))); end end end % 计算当前像边缘位置 edge_pos(i,j) = (zernike_i(n+1,m+1)*zernike(1,1)-zernike_i(1,1)*zernike(n+1,m+1))/... (zernike(1,1)*zernike(n+1,n+1)-zernike(1,n+1)*zernike(n+1,1)); end end end % 显示边缘检测结果 figure; imshow(img); hold on; contour(edge_pos, [0,0], 'r', 'LineWidth', 2); ``` 需要注意的是,该代码中使用了一个名为`zernike_poly`的辅助函数,用于计算Zernike多项式。该函数的代码如下: ```matlab function poly = zernike_poly(j, i, img) [x, y] = meshgrid(1:size(img,2), 1:size(img,1)); rho = sqrt((2*x-size(img,2)-1).^2 + (2*y-size(img,1)-1).^2)/(size(img,1)-1); theta = atan2((size(img,1)-1-2*y+1), (2*x-1-size(img,2))); poly = sqrt((2*(i+1))./(1+delta(j,0))).*zernike_r(j,i,rho).*zernike_t(j,theta); end function delta_val = delta(a,b) if a == b delta_val = 1; else delta_val = 0; end end function r = zernike_r(j, i, rho) r = zeros(size(rho)); for s = 0:(i-j)/2 r = r + (-1)^s*factorial(i-s)/(factorial(s)*factorial((i+j)/2-s)*factorial((i-j)/2-s)).*... rho.^(i-2*s); end end function t = zernike_t(j, theta) t = zeros(size(theta)); if j == 0 t = ones(size(theta)); elseif mod(j,2) == 0 t = cos(j*theta); else t = sin(j*theta); end end ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人工智能专属驿站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值