旋光效应可视检测液体的浓度(附MATLAB代码)

本文介绍了一种基于旋光可视检测的液体浓度光电检测系统,利用CCD相机采集旋光楔形图像,通过标定实验系统参数,测定未知浓度葡萄糖溶液的浓度。文章详细解释了旋光效应、角向偏振片显示原理及系统工作原理,并提供了MATLAB处理程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的

根据CCD相机采集到的旋光楔形图像,标定当前基于旋光可视检测的液体浓度光电检测系统实验系统参数;
然后由测得的比旋光度测定未知浓度葡萄糖溶液的浓度。

原理

一、旋光效应
当一束单一的平面偏振光通过某些晶体或物质的溶液时,其振动方向发生改变,此时光的振动面将以光的传播方向为轴线会旋转一定的角度,这种现象称为旋光现象,旋转的角度称为旋光度。物质的这种使偏振光的振动面旋转的性质叫做旋光性,具有旋光性的物质叫做旋光性物质或旋光物质。

二、角向偏振片显示原理
角向偏振显示器又称角向偏振片,其截面图如图1(a)所示。角向偏振片可以看作是一个线栅偏振,即由多个线型偏振器件构成的具有圆形同心传播轴的偏振器件。角向偏振片的每一个小区域都是一个线型偏振器,其传输轴的方向垂直于径向。当线偏振光通过角向偏振显示器之后,观察成像结果发现,在线偏振光的偏振方向上会出现两个相对的楔形暗区如图1(b),对该图像进行处理,可以获得线偏振光的振动方向。

(a)
(b)
图1 (a)角向偏振显示器截面; (b)线偏振光经过角片器成像仿真图
 

三、系统原理
物质的旋光度实验光路如图4.2所示,由单色光源(钠光灯或激光器)发出的光,通过起偏镜(尼可尔棱镜)后,转变为平面偏振光(简称偏振光)。当偏振光通过样品管中的旋光物质时,由于旋光性,其振动平面会旋转一定角度,此时的偏振光在入射到角向偏振片后,成像到CCD相机上。拍摄到的图像的楔形暗区方向即为经过旋光物质作用后光束的偏振方向,与未经过旋光物质作用的光束的偏振方向的夹角即为样品的实测旋光度 θ \theta θ
在这里插入图片描述

图2 实验光路

旋光度的大小除了取决于被测分子的立体结构外,还受到待测溶液的浓度、偏振光通过溶液的厚度(即样品管的长度)以及温度、所用光源的波长、所用溶剂等因素的影响,这些因素在测定结果中都要表示出来。常用比旋光度来表示物质的旋光性,比旋光度和旋光度的关系如下:
θ = α ⋅ c ⋅ L \theta=\alpha\cdot c \cdot L θ=αcL

上式中, θ \theta θ为所测得的旋光度;c为液层厚度为L (cm)的液体的浓度(g/ml); α \alpha α为旋光物质的比旋光度,即单位浓度和单位长度下的旋光度,是旋光性物质的物理常数。通过测定旋光度,可以鉴定物质的纯度、测定溶液的浓度、密度和鉴别光学异构体。
实验系统中,在确定容器和旋光物质的情况下, α \alpha α与L 均为常数,上式可写为:
θ = K ⋅ c \theta=K\cdot c θ=Kc
其中K是当前实验系统待标定参数。

MATLAB处理程序

算法流程图如下:
在这里插入图片描述
在这里插入图片描述

未处理旋光图像

在这里插入图片描述

二值化图像
 

程序输出角度为3.0248°,根据公式θ=K⋅c及标定得到的K值计算得未知溶液浓度:
在这里插入图片描述

close all;
clear all;
[filename1, pathname1] = uigetfile({'*.tif';'*.jpg'; '*.bmp'});
if filename1==0, return, end 
oldpath=cd;  
cd(pathname1);
[filename2, pathname2] = uigetfile({'*.tif';'*.jpg'; '*.bmp'});
cd(oldpath);
if filename2==0, return, end 
FILENAME1 = [pathname1 filename1];
FILENAME2 = [pathname2 filename2];
SorImg1=imread(FILENAME1);
SorImg2=imread(FILENAME2);
subplot(1,2,1),imshow(SorImg1);
subplot(1,2,2),imshow(SorImg2);
threshold1=0.35;
threshold2=0.35 ;
figure(1);   %楔形暗区图像
subplot(1,2,1),[Orientation1,Centroid1]=RotAngFun(SorImg1,filename1,threshold1,threshold2);
subplot(1,2,2),[Orientation2,Centroid2]=RotAngFun(SorImg2,filename2,threshold1,threshold2);
Delta=Orientation1-Orientation2;  %单位是度
display(['the angle is ' num2str(Delta)]);
figure(2);  %外接椭圆长轴与x轴
subplot(1,2,1),hold on,PlotFun(Orientation1,Centroid1,size(SorImg1));
subplot(1,2,2),hold on,PlotFun(Orientation2,Centroid2,size(SorImg2));


function [Orientation,Centroid]=RotAngFun(SorImg,filename,threshold1,threshold2)
flag=strfind(filename,'-');
% GrayImg=rgb2gray(SorImg);
GrayImg = SorImg;
if(isempty(flag))
    BwImg=im2bw(GrayImg,threshold1);
else
    BwImg=im2bw(GrayImg,threshold2);
end
BwImg=bwareaopen(BwImg,1000);
BwImg=~bwareaopen(~BwImg,1000);
se=strel('disk',5);
BwImg=imopen(BwImg,se);
BwImg=imfill(BwImg,'holes');
imshow(BwImg);
S=regionprops(BwImg,'Orientation','Centroid');
Orientation=S.Orientation;
Centroid=S.Centroid;
end

function  PlotFun(Orientation,Centroid,ImgSize)
k=tan(deg2rad(Orientation));
b=-Centroid(2)-k*Centroid(1);
x=1:ImgSize(2);
y=k*x+b;
plot(x,-y,'r');hold on;
y1=Centroid(2)*ones(1,ImgSize(2));
plot(x,y1,'b');
title(num2str(Orientation));
end
马拉戈尼效应是一种流体力学现象,描述了由于表面张力梯度引起的液体流动。这种效应广泛应用于物理化学、材料科学以及计算机仿真领域。以下是关于马拉戈尼效应在IT应用和计算机模拟中的相关信息: --- ### 方法一:数值计算模型 利用有限差分法或有限元法可以构建马拉戈尼效应对界面流动的影响模型。这种方法通常需要求解Navier-Stokes方程组,并结合热力学边界条件来分析温度变化导致的表面张力梯度。 ```matlab % 示例代码MATLAB中实现简单的二维扩散过程 clc; clear; Nx = 100; Ny = 100; % 定义网格大小 T = zeros(Nx, Ny); T(1,:) = 100; % 初始温度分布 for iter = 1:1000 T_new = (T + circshift(T,[0,-1]) + circshift(T,[0,1]) ... + circshift(T,[-1,0]))/4; T = T_new; end surf(T); ``` 此代码片段展示了如何通过迭代更新节点值以近似解决传热问题,这是研究马拉戈尼效应的基础之一。 --- ### 方法二:分子动力学模拟 对于微观尺度下的马拉戈尼效应,可以通过分子动力学(MD)方法进行建模。该技术能够揭示单个分子间的相互作用及其对整体行为的影响。例如,在LAMMPS软件包中定义系统参数并通过输入脚本运行模拟实验。 ```bash # LAMMPS 输入文件模板 units metal dimension 3 boundary p p p atom_style atomic read_data data.molecules # 加载初始结构数据 pair_style lj/cut 2.5 pair_coeff * * 1.0 1.0 timestep 0.001 run 10000 # 进行一万步的时间积分 ``` 此类程序有助于理解液滴蒸发过程中因浓度不均而产生的自发运动机制。 --- ### 方法三:图形渲染可视化 为了更直观地展示马拉戈尼效应的结果,现代GPU加速技术被用来创建逼真的动画效果。OpenCL或者CUDA平台支持开发者编写高效算法处理大规模粒子集合之间的复杂交互关系。 ```cpp // CUDA核函数声明 __global__ void updateParticles(float* pos_x, float* pos_y) { int idx = threadIdx.x + blockIdx.x * blockDim.x; // 更新规则取决于具体应用场景... } ``` 借助这样的硬件优势,科研人员得以快速验证假设并在虚拟环境中重现真实世界的动态特性。 --- ### 注意事项 当尝试开发自己的应用程序时,请确保选择合适的编程语言和技术栈;同时也要考虑到不同层次精度需求下所需资源消耗的不同程度。此外,开源社区提供了许多现成工具可以帮助入门学习者更快上手实践项目。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值