MATLAB提供了一个称为toeplitz的函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MATLAB提供了一个称为toeplitz的函数相关的知识,希望对你有一定的参考价值。
MATLAB提供了一个称为toeplitz的函数,可根据第一行和第一列生成toeplitz矩阵。用此函数开发另一个MATLAB函数来执行线性卷积,此函数的规范格式为:
function [y, H]=conv_tp(h, x)
% 用toeplitz矩阵的线性卷积
% [y, H]=conv_tp(h, x)
% y=列向量形式的输出序列
% H=对应于序列h的toeplitz矩阵,因而y=Hx
% h=列向量形式的冲激响应序列
% x=列向量形式的输入序列
这个问题怎么解决啊?
for i=1:length(h)
r(i)=h(length(h)+1-i);
end
for j=(length(h)+1):(length(x)+length(h)-1)
r(j)=0;
end
c(1)=h(length(h));
for k=2:length(x)
c(k)=0;
end
H=toeplitz(c,r);
y=x*H;
end
学长你好~ 参考技术B toeplitz函数的功能是生成托普利兹(toeplitz)矩阵。
托普利兹矩阵的特点是:除第一行、第一列外,其他每个元素都与它左上角的元素相同。
调用格式:
A=toeplitz(第1列元素数组,第1行元素数组)
例如:
>> clear
>> b=[3 4 1 6];
>> c=[3 2 5 8];
>> A=toeplitz(b,c)
A =
3 2 5 8
4 3 2 5
1 4 3 2
6 1 4 3
注意:第1行的第1个元素应与第1列的第1个元素相同,否则第1行的第一个元素将自动改为1列的第1个元素。
使用 Matlab 实现的 Prewitt 边缘检测器提供的边缘比内置函数厚
【中文标题】使用 Matlab 实现的 Prewitt 边缘检测器提供的边缘比内置函数厚【英文标题】:Prewitt edge detector implemented with Matlab gives thick edges than the in-built function 【发布时间】:2021-12-19 07:44:06 【问题描述】:我实现了 Prewitt 边缘检测器,并将我的输出与 Matlab 的内置 Prewitt 边缘检测器进行了比较,我注意到我的输出提供了更厚的边缘。可能是什么原因?
input = imread('pic.png');
input = double(rgb2gray(input));
kernel_x = [-1, 0, 1; -1, 0, 1; -1, 0, 1];
kernel_y = [1, 1, 1; 0, 0, 0; -1, -1, -1];
[length, width] = size(input);
new = input;
for i = 1:length - 2
for j = 1:width - 2
Gx = sum(sum(kernel_x.*input(i:i+2, j:j+2)));
Gy = sum(sum(kernel_y.*input(i:i+2, j:j+2)));
new(i+1, j+1) = sqrt(Gx.^2 + Gy.^2);
end
end
new = uint8(new);
% binarizing image and setting threshold
edge = imbinarize(edge, 100); % final output from implementation
我使用的内置函数是edge(input, 'Prewitt')
我的实现与内置运算符的输出:
这可能是什么原因?
我也尝试更改阈值,但仍然没有成功。
【问题讨论】:
我认为是edge(edge==100) = 0
行。我认为您想使用<
而不是==
。
@CrisLuengo 我使用了 Matlab edge() 函数。边缘(输入,'prewitt')
@DrewHall 我更改了代码。我没有使用 3 行进行阈值处理,而是使用了 imbinarize(edge, threshold)。不过,我的边缘很厚。
【参考方案1】:
文档中没有明确说明,但是对于 Sobel、Prewitt 和 Roberts 方法,edge
应用了细化。有an optional input argument 'nothinning'
,它跳过了细化步骤。不幸的是,这是文档中唯一表明此步骤正在发生的部分。
如果您有使用bwmorph(bw,'thin')
的图像处理工具箱,则可以应用细化。
【讨论】:
以上是关于MATLAB提供了一个称为toeplitz的函数的主要内容,如果未能解决你的问题,请参考以下文章