求详细解释一下这个matlab源程序,并讲讲原理

求详细解释一下这个matlab源程序,并讲讲原理,第1张

对于光学的东西不是太懂,能做到的只是帮助你更容易地理解程序每一句话,希望对你有帮助

最好将下面的程序复制粘贴到matlab的编辑窗口中再阅读

clear % 清除matlab工作内存

lam=500e-9; %定义一个常数λ: 500乘以10的-9次方

a=1e-3;D=1; %定义常数a:10的-3次方;常数D=1

ym=3lamD/a; %定义ym

ny=51; %定义取点个数 ny=51

ys=linspace(-ym,ym,ny); %定义一个数组ys,从-ym到ym之间取ny个点

np=51; %定义取点个数 np=51

yp=linspace(0,a,np); %定义一个数组yp,从0到a之间取np个点

for i=1:ny %循环语句,一共循环51次

sinphi=ys(i)/D; %计算得到 sinΦ,

alpha=2piypsinphi/lam; % 计算得到 α=2Δ/λ=πypys/λD(由于yp是一个向量,这里得到的α也是一个向量,包含51个数)

sumcos=sum(cos(alpha)); % 计算得到 Σcosα

sumsin=sum(sin(alpha)); % 计算得到 Σsinα

B(i,:)=(sumcos^2+sumsin^2)/np^2; % 计算得到光强 I=I0(Σcosα)2+(Σsinα)2,并存储为矩阵B的第i行

end

N=255;

Br=(B/max(B))N; %计算得到光强分布矩阵

subplot(1,2,1) %将绘图区分成左右两部分,首先在左侧绘图区绘图

image(ym,ys,Br); %绘制光强分布图

colormap(gray(N)); %更改图像模式为灰度图像

subplot(1,2,2) %然后选择在右侧绘图区绘图

plot(B,ys); %绘制光强分布曲线

im=imread('7jpg');

im=rgb2gray(im);

imm=double(im);

figure,imagesc(imm),colormap(gray)

hist(imm);figure(gcf);

im1=imm<=180;

figure,imagesc(im1),colormap(gray);

im2=im1imm;

figure,imagesc(im2),colormap(gray)

你给的例子很清楚了

只是你要注意文件名字的

按你的意思你的文件名字应该是['m',num2str(i) ,'ubmp']

而加上路径之后应该是'E:\matlap\bin\BMP\mXXXubmp'

其中mXXXubmp就是由['m',num2str(i) ,'ubmp']

而前面的路径不要完了左后的\号

或者直接将文件名写成

ImgName=['E:\matlap\bin\BMP\m‘,num2str(i),'ubmp'];

代码如下:

import javaawtColor;

import javaawtDimension;

import javaawtFlowLayout;

import javautilHashMap;

import javautilMap;

import javaxswingJComboBox;

import javaxswingJFrame;

import javaxswingJTextField;

public class App extends JFrame {

private JComboBox<String> cbxColors;

private JTextField txtName;

private Map<String, Color> colorMap;

public App() {

thissetSize(300, 100);

thissetLocationRelativeTo(null);

thissetDefaultCloseOperation(JFrameEXIT_ON_CLOSE);

thissetLayout(new FlowLayout());

colorMap = new HashMap<>();

colorMapput("红", ColorRED);

colorMapput("绿", ColorGREEN);

colorMapput("蓝", ColorBLUE);

colorMapput("黄", ColorYELLOW);

cbxColors = new JComboBox(colorMapkeySet()toArray());

cbxColorssetPreferredSize(new Dimension(50, 23));

cbxColorsaddItemListener(e -> {

Color color = colorMapget(egetItem());

txtNamesetBackground(color);

});

thisadd(cbxColors);

txtName = new JTextField();

txtNamesetPreferredSize(new Dimension(100, 23));

txtNamesetBackground(ColorRED);

thisadd(txtName);

}

public static void main(String[] args) {

new App()setVisible(true);

}

}

运行结果:

从上面的程序看,主要问题有:1,mov是一个structure,有两个部分movcdata和movcolormap,

2,要区分avi文件的颜色格式,如是truecolor格式,则movcdata的size是MN3且movcolormap是空的,如是 indexed格式,则movcdata的size是MN且movcolormap的size是M3,因此,程序中有多处不完善的地方,不能处理所有的情况,就会出现全黑的图像。若要改,可把录像文件发过来,我调试用。

clear;

Lambda=input('输入光的波长(单位为nm):取500');

Lambda=Lambda1e-9;

d=input('输入两个缝的间距(单位为nm):(取2)');

d=d0001;

z=input('输入缝到屏的距离(单位为m):(取1)');

ymax=5Lambda/d;xs=ymax;

Ny=101;ys=linspace(-ymax,ymax,Ny);

for i=1:Ny

L1=sqrt((ys(i)-d/2)^2+z^2);

L2=sqrt((ys(i)+d/2)^2+z^2);

phi=2pi(L2-L1)/Lambda;

B(i,:)=4cos(phi/2)^2;

N1=11,dL=linspace(-01,01,N1);

Lambda1=Lambda(1+dL');

phi1=2pi(L2-L1)/Lambda1;

B(i,:)=sum(4cos(phi1/2)^2)/N1;

end

NCLevels=255;

Br=(B/40)NCLevels;

subplot(1,4,3),image(xs,ys,Br);

set(gca,'color','w')

colormap(gray(NCLevels));

subplot(1,4,4),plot(B(:),ys)

pause,subplot(1,1,1)

你看看这个效果怎么样,因为我不知道这个的物理背景,我只是做了一些语法的检查

clc;

clear all;

close all; % 清理工作空间

clear

[imA,map1] = imread('Atif');

M1 = double(imA) / 256;

[imB,map2] = imread('Btif');

M2 = double(imB) / 256;

zt= 4;

wtype = 'haar';

% M1 - input image A

% M2 - input image B

% wtype使用的小波类型

% Y - fused image

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%

%% 小波变换图像融合

%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% 小波变换的绝对值大的小波系数,对应着显著的亮度变化,也就是图像中的显著特征。所以,选择绝对值大

%% 的小波系数作为我们需要的小波系数。注意,前面取的是绝对值大小,而不是实际数值大小

%%

%% 低频部分系数采用二者求平均的方法

%%

%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

[c0,s0] = wavedec2(M1, zt, wtype);%多尺度二维小波分解

[c1,s1] = wavedec2(M2, zt, wtype);%多尺度二维小波分解

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% 后面就可以进行取大进行处理。然后进行重构,得到一个图像

%% 的小波系数,然后重构出总的图像效果。

%% 取绝对值大的小波系数,作为融合后的小波系数

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

KK = size(c1);

Coef_Fusion = zeros(1,KK(2));

Temp = zeros(1,2);

Coef_Fusion(1:s1(1,1)) = (c0(1:s1(1,1))+c1(1:s1(1,1)))/2; %低频系数的处理

%这儿,连高频系数一起处理了,但是后面处理高频系数的时候,会将结果覆盖,所以没有关系

%处理高频系数

MM1 = c0(s1(1,1)+1:KK(2));

MM2 = c1(s1(1,1)+1:KK(2));

mm = (abs(MM1)) > (abs(MM2));

Y = (mmMM1) + ((~mm)MM2);

Coef_Fusion(s1(1,1)+1:KK(2)) = Y;

%处理高频系数end

%重构

Y = waverec2(Coef_Fusion,s0,wtype);

%显示图像

subplot(2,2,1);imshow(M1);

colormap(gray);

title('input2');

axis square

subplot(2,2,2);imshow(M2);

colormap(gray);

title('input2');

axis square

subplot(223);imshow(Y,[]);

colormap(gray);

title('融合图像');

axis square;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

以上就是关于求详细解释一下这个matlab源程序,并讲讲原理全部的内容,包括:求详细解释一下这个matlab源程序,并讲讲原理、matlab中如何将彩色图像背景去除,只留下细胞区域,并且灰度化细胞,要求有程序、MATLAB图像处理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存