优化问题,matlab程序和lingo程序能运行,但出来的结果和正确答案不一样,错在哪里望高手指点

优化问题,matlab程序和lingo程序能运行,但出来的结果和正确答案不一样,错在哪里望高手指点,第1张

当你每次进行腐蚀膨胀这些 *** 作后,每次得到的二值图都会不一样,从而导致图像中白色像素点的总面积也就不一样了,所以你每次计算面积的结果也就不一样。除非你保存某一次进行腐蚀膨胀这些 *** 作的二值图,然后用bwarea求其面积,结果就不会变了。

方法/步骤

将命名为’girljpg‘的图像移动到MATLAB源程序所在文件夹。如图源程序命名为"dip1",存储文件夹为D:\用户目录\Documents\MATLAB,将需要处理的移动到该文件夹。

使用imread函数读入该,使用imshow函数显示读入的该图像。

代码:

clear;

rgb=imread('girljpg');

figure(1)

imshow(rgb);

右键电极目标图像。点击“属性”,再选择“详细信息”,观察图像的大小。本文选用的图像大小为640960,宽640像素,高960像素。

容差设为100,定义R分量大于150,G与B分量小于100的像素点为观察到的红色像色。遍历图像所有像素,是不是红色的像色变成黑的像素(R=G=B=0)

代码:

for i=1:960

for j=1:640

if((rgb(i,j,1)>150&rgb(i,j,2)<100&rgb(i,j,3)<100)==0)

rgb(i,j,1)=0;

rgb(i,j,2)=0;

rgb(i,j,3)=0;

end

end

end

figure(2)

imshow(rgb);

说明

RGB图像可以表示为矩阵(X,Y,N)。X,Y分别为长和宽。N=1,2,3。N=1表示图像的R分量矩阵,2为G分量矩阵,3为B分量矩阵。

图像还是有许多噪声的,可采用数学形态学的方法除去噪声。用strel函数生成模版:

SE=strel('rectangle',[3 3]);该模版表示33的长方形模版。

开运算处理,可去除非常小或窄的像素。这里是用MATLAB内置函数先进行腐蚀再进行膨胀,完成开运算。

代码:

I2=imerode(rgb,SE);%腐蚀

figure(3);

I3=imdilate(I2,SE);%膨胀

imshow(I3);

这里提供整个程序的代码:

clear;

rgb=imread('girljpg');

figure(1)

imshow(rgb);

for i=1:960

for j=1:640

if((rgb(i,j,1)>150&rgb(i,j,2)<100&rgb(i,j,3)<100)==0)

rgb(i,j,1)=0;

rgb(i,j,2)=0;

rgb(i,j,3)=0;

end

end

end

figure(2)

imshow(rgb);

SE=strel('rectangle',[3 3]);

I2=imerode(rgb,SE);

figure(3);

I3=imdilate(I2,SE);

imshow(I3);

1、dilate函数

该函数能够实现二值图像的膨胀 *** 作,有以下形式:

BW2=dilate(BW1,SE)

BW2=dilate(BW1,SE,…,n)

其中:BW2=dilate(BW1,SE)表示使用二值结构要素矩阵SE队图像数据矩阵BW1执行膨胀 *** 作。输入图像BW1的类型为double或unit8,输出图像BW2的类型为unit8。BW2=dilate(BW1,SE,…,n)表示执行膨胀 *** 作n次。

2、erode 函数

该函数能够实现二值图像的腐蚀 *** 作,有以下形式:

BW2= erode(BW1,SE)

BW2= erode(BW1,SE,…,n)

其中:BW2= erode(BW1,SE)表示使用二值结构要素矩阵SE队图像数据矩阵BW1执行腐蚀 *** 作。输入图像BW1的类型为double或unit8,输出图像BW2的类型为unit8。BW2= erode(BW1,SE,…,n)表示执行腐蚀 *** 作n次。

3、bwmorph函数

该函数的功能是能实现二值图像形态学运算。它的格式如下:

① BW2=bwmorph(BW1,operation)

② BW2=bwmorph(BW1,operation,n)

其中:对于格式①,bwmorph函数可对二值图像BW1采用指定的形态学运算;对于格式②,bwmorph函数可对二值图像BW1采用指定的形态学运算n次。operation为下列字符串之一:

‘clean’:除去孤立的像素(被0包围的1)

‘close’:计算二值闭合

‘dilate’:用结构元素计算图像膨胀

‘erode’:用结构元素计算图像侵蚀

4、imclose函数

该函数功能是对灰度图像执行形态学闭运算,即使用同样的结构元素先对图像进行膨胀 *** 作后进行腐蚀 *** 作。调用格式为:

IM2=imclose(IM,SE)

IM2=imclose(IM,NHOOD)

5、imopen函数

该函数功能是对灰度图像执行形态学开运算,即使用同样的结构元素先对图像进行腐蚀 *** 作后进行膨胀 *** 作。调用格式为:

IM2=imopen(IM,SE)

IM2=imopen(IM,NHOOD)

3用MATLAB编程实现图像去噪

31 二值形态学消除图像噪声

用二值形态学方法对图像中的噪声进行滤除的基本思想[4]是:使用具有一定形态的结构元素去度量和提取图像中的对应形状,以达到消除图像噪声的目的。下面是二值形态学消除图像噪声的一个实例。

首先将tiretif图像加入椒盐噪声,这种噪声前面已经介绍过,它在亮的图像区域内是暗点,而在暗的图像区域内是亮点,再对有噪声图像进行二值化 *** 作,再对有噪声图像进行开启 *** 作,由于这里的结构元素矩阵比噪声的尺寸要大,因而开启的结果是将背景上的噪声点去除了,最后对前一步得到的图像进行闭合 *** 作,将轮胎上的噪声点去掉了。

下面是算法实现的程序代码:

I1=imread('tiretif'); %读灰度图tiretif

I2=imnoise(I1,'salt & pepper'); %在图像上加入椒盐噪声

figure,imshow(I2) %显示加椒盐噪声后的灰度图像

I3=im2bw(I1); %把加椒盐噪声后的灰度图像二值化

figure,imshow(I3) %显示二值化后的图像

I4=bwmorph(I3,'open'); %对二值噪声图像进行二值形态学开运算

figure,imshow(I4) %显示开运算后的图像

I5=bwmorph(I4,'close'); %对上述图像进行形态学闭运算

figure,imshow(I5) %显示最终处理后的图像

以上就是关于优化问题,matlab程序和lingo程序能运行,但出来的结果和正确答案不一样,错在哪里望高手指点全部的内容,包括:优化问题,matlab程序和lingo程序能运行,但出来的结果和正确答案不一样,错在哪里望高手指点、通过matlab ,图在片中判断其中有没有红色存在,输出是或否的答案,要怎么做、matlab 二值图像的形态学变换等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10173356.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存