对于光学的东西不是太懂,能做到的只是帮助你更容易地理解程序每一句话,希望对你有帮助
最好将下面的程序复制粘贴到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图像处理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)