matlab中如何显示出已知二元函数的图像?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab中如何显示出已知二元函数的图像?相关的知识,希望对你有一定的参考价值。

我是新手哈~已经做出某个二元函数的最小值,就是不知道用什么指令可以绘制出这个函数的图像,并且把那个最小值在图像上标出来??望高手指教,急用啊!!!
最好能告诉我具体的操作指令,顺序步骤之类的~还有plot是画一元函数的吧。。

参考技术A 举个例子吧

x=0:0.01:2*pi;
y=sin(x);
plot(x,y)
axis([0 2*pi -1.2 1.2])
[minY,I]=min(y)
hold on
plot(x(I),minY,'*r')
text(x(I),minY+0.1,num2str([x(I),minY]))本回答被提问者采纳
参考技术B plot函数画图像。
既然知道了最小值,就直接在图像上标记了

如何在matlab中显示小波变换函数dwt2的结果

【中文标题】如何在matlab中显示小波变换函数dwt2的结果【英文标题】:How to Display wavelet transformation function dwt2 results in matlab 【发布时间】:2015-11-03 05:59:18 【问题描述】:

我在图像上应用 dwt2 函数以应用小波变换,它给出了四个结果图像 cA(低通图像)、cH(水平细节图像)、cV(垂直细节图像)、cD(对角细节图像)。一切都很好,直到现在。我想可视化这些结果图像。

现在我正在使用下面的代码可视化这四个结果图像。

image = imread(imagePath);
wavename = 'haar';
[cA,cH,cV,cD] = dwt2(im2double(iamge),wavename);
imshow([cA,cH; cV,cD],'Colormap',gray);

当我运行此代码时,可视化结果如下所示

但我希望我的结果应该是这样的,任何人都可以帮助我。

【问题讨论】:

【参考方案1】:

在您问题的第二张图片中,显示了两级小波变换。对于使用dwt2 的代码示例,您只进行了单级分解。 要进行两级分解,您可以将wavedec2 函数与N=2 结合使用。要创建如图所示的绘图,您必须仔细查看 wavedec2 的返回值:

(图片来自 Mathworks,来自 [2])

向量C 包含所有近似系数,以列方式存储。 S 是所谓的“簿记”矩阵,因为它包含有关如何存储数据的信息。

现在第一张图片,上面示例中的cA2,是C 的前32*32 个条目。使用iijj作为索引变量,我们可以得到C的相关部分,使用reshape返回图片格式:

ii = 1; jj = prod(S(1,:));
cA2 = reshape(C(ii:jj),S(1,:));

其他的二级系数也同样得到:

ii = jj+1; jj = ii + prod(S(2,:)) - 1;
cH2 = reshape(C(ii:jj),S(2,:));

ii = jj+1; jj = ii + prod(S(2,:)) - 1;
cV2 = reshape(C(ii:jj),S(2,:));

ii = jj+1; jj = ii + prod(S(2,:)) - 1;
cD2 = reshape(C(ii:jj),S(2,:));

同样的方法也可以得到一级系数,使用S的第三行:

ii = jj+1; jj = ii + prod(S(3,:)) - 1;
cH1 = reshape(C(ii:jj),S(3,:));

ii = jj+1; jj = ii + prod(S(3,:)) - 1;
cV1 = reshape(C(ii:jj),S(3,:));

ii = jj+1; jj = ii + prod(S(3,:)) - 1;
cD1 = reshape(C(ii:jj),S(3,:));

现在可以通过根据需要排列图像来简单地创建情节:

imshow([[cA2,cH2; cV2,cD2],cH1;cV1,cD1],'Colormap',pink)

要添加边框,你可以使用rectangle函数和来自S的信息:

% Small rectangles
rectangle('Position',[0,0,S(1,1),S(1,2)],'LineWidth',2,'EdgeColor','y');
rectangle('Position',[S(1,1),0,S(1,1),S(1,2)],'LineWidth',2,'EdgeColor','y');
rectangle('Position',[0,S(1,2),S(1,1),S(1,2)],'LineWidth',2,'EdgeColor','y');
rectangle('Position',[S(1,1),S(1,2),S(1,1),S(1,2)],'LineWidth',2,'EdgeColor','y');

% Large rectangles
rectangle('Position',[0,S(3,2),S(3,1),S(3,2)],'LineWidth',2,'EdgeColor','y');
rectangle('Position',[S(3,1),0,S(3,1),S(3,2)],'LineWidth',2,'EdgeColor','y');
rectangle('Position',[S(3,1),S(3,2),S(3,1),S(3,2)],'LineWidth',2,'EdgeColor','y');

【讨论】:

感谢它的工作,但有一件事如何为每张图片添加边框。 完美。最简单的方法是使用rectangle('Position',[x,y,w,h]) 添加每个边框。您还可以使用S 的内容来计算每个矩形的x,y,w,h 我是 matlab 新手,你能告诉我如何使用 S 计算 x,y,w,h。 我编辑了答案以包含边框。这行得通吗? 感谢它的工作。非常感谢您的解决方案。【参考方案2】:

更简单的方法是将结果连接为矩阵,然后填充后续矩阵:

image = imread(imagePath);
wavename = 'haar';
[cA,cH,cV,cD] = dwt2(im2double(image),wavename);
[cAA,cAH,cAV,cAD] = dwt2(cA,wavename); % Recompute Wavelet of Approximation Coefs.
Level2=[cAA,cAH; cAV,cAD]; %contacinat
imshow([Level2,cH; cV,cD],'Colormap',gray);

“cameraman.tif”图像的结果是:

对于更多级别,只需计算第二级别的近似系数的小波。也就是说,取多个小波,即对当前小波结果的近似系数重新计算小波,得到下一级小波。

【讨论】:

以上是关于matlab中如何显示出已知二元函数的图像?的主要内容,如果未能解决你的问题,请参考以下文章

R 语言隐函数作图(二元二次函数)

Matlab画怎么画这个二元函数图像

matlab中如何对已知函数进行周期延拓

在MATLAB中,已知2个参数,画出广义高斯分布的曲线,求高手贴出程序,万分感谢!!

如何在 Matlab 中对两个向量应用二元函数以获得所有成对结果的矩阵?

想用Matlab画出下面图片中函数的三维图像,求大神帮忙编写程序!!!