图像变化检测实例及源代码

合集下载

遥感影像变化检测实例

遥感影像变化检测实例

遥感影像变化检测实例一、引言遥感技术以其宏观、快速、动态、连续的特点,在资源调查、环境监测、城市规划等领域发挥着越来越重要的作用。

遥感影像变化检测作为遥感技术的重要应用之一,旨在通过对比分析不同时间获取的同一地区遥感影像,识别出地表覆盖发生的变化。

本文将以某城市近XX年的遥感影像数据为例,探讨遥感影像变化检测的方法、流程及其在城市发展监测中的应用。

二、研究区域与数据源本研究选取某城市为研究区域,该城市近年来经历了快速的城市化进程,地表覆盖发生了显著变化。

为准确反映这一变化过程,我们收集了该市XXXX年、XXXX 年和XXXX年的高分辨率遥感影像数据,影像分辨率均为1米。

数据来源为国内外知名的遥感数据提供商,经过预处理后,影像质量满足变化检测的要求。

三、方法与技术流程本研究采用基于像素的变化检测方法,通过对比分析不同年份遥感影像的像素值,识别出地表覆盖发生变化的区域。

具体流程如下:影像预处理:对收集到的遥感影像进行辐射定标、大气校正等预处理操作,消除影像中的畸变和噪声,提高影像质量。

影像配准:将不同年份的遥感影像进行精确配准,确保同一地理位置的像素在不同影像中能够准确对应。

变化检测:采用像素差值法、比值法等方法计算不同年份遥感影像的像素差异,生成初步的变化检测结果图。

结果后处理:对初步的变化检测结果进行滤波、形态学处理等后处理操作,消除误检和漏检现象,提高变化检测的精度。

精度验证:通过实地调查、对比高分辨率影像等方法对变化检测结果进行精度验证,确保结果的可靠性和准确性。

四、结果与分析变化检测结果:经过上述流程处理,我们得到了该市XXXX年至XXXX年间的地表覆盖变化检测结果图。

结果显示,该市在这段时间内城市建成区面积显著扩大,新增了大量建筑用地;同时,部分农田、绿地等自然地表被城市用地所取代。

变化类型分析:根据变化检测结果图,我们可以进一步分析地表覆盖变化的具体类型。

例如,可以将变化区域划分为城市扩张、农田转用、绿地减少等类型,以便更深入地了解城市化进程对地表覆盖的影响。

变化检测-差值算法

变化检测-差值算法

差值计算图像变化#coding:utf-8# 参考《python地理空间分析指南》#插值算法#执行变化监测的步骤大致为:用gdal_array将图片导入numpy数据中——变化前后影像作差——图像分类着色——保存图片。

具体的代码为#实验结果中,绿色表示添加的元素,红色表示减少的元素。

示例中采用的差值算法的处理结果虽然不够完美,但也能提供一种变化检测的处理思路。

最终的实验结果为:import numpy as npimport matplotlib.pyplot as pltfrom osgeo import gdal, gdal_arrayimport cv2import sys# 加载两幅图像# img1 = 'D:\\BaiduNetdiskWorkspace\\pythonAlgorTest\\24A.png'# img2 = 'D:\\BaiduNetdiskWorkspace\\pythonAlgorTest\\24B.png'# outimg='D:\BaiduNetdiskWorkspace\pythonAlgorTest\change.tif'def main(img1,img2,outimg):im_1 =img1im_2 = img2outurl = outimgprint("输入路径1:"+im_1)print("输入路径1:"+im_2)# 载入数组arr_1 = gdal_array.LoadFile(im_1).astype(np.int8)arr_2 = gdal_array.LoadFile(im_2).astype(np.int8)# # 显示两幅图像# plt.figure(figsize=(20, 40))# plt.subplot(121);plt.imshow(cv2.merge((arr_1[0], arr_1[1], arr_1[2])). astype(np.uint8))# plt.subplot(122);plt.imshow(cv2.merge((arr_2[0], arr_2[1], arr_2[2])). astype(np.uint8))# plt.show()# 进行变化检测diff = arr_1 - arr_2# 建立类别架构并将变化特征隔离classes = np.histogram(diff, bins=5)[1]# 用黑色遮罩遮住不明显的特征lut = [[0,0,0], [0,0,0], [0,0,0], [255,0,0], [0,255,0], [100,50,255]] # 类别初始值start =1# 创建输出图片rgb = np.zeros((3, diff.shape[1], diff.shape[2]), np.int8)# 处理并分配颜色for i in range(len(classes)):mask = np.logical_and(start <= diff, diff <= classes[i])masked = ((mask[0] == mask[1]) == mask[2])for j in range(len(lut[i])):rgb[j] = np.choose(masked, (rgb[j], lut[i][j]))strat = classes[i] +1# 保存out = gdal_array.SaveArray(rgb, outurl, format='GTiff', prototype=i m_2)out1 =Noneprint("输出路径1:"+outurl)return outurl# # 查看差值图片# ima = 'D:\BaiduNetdiskWorkspace\pythonAlgorTest\change.tif'# arr = gdal_array.LoadFile(ima).astype(np.uint8)# plt.figure(figsize=(8, 8))# plt.imshow(cv2.merge((arr[0], arr[1], arr[2])))# plt.show()if__name__=='__main__':url = sys.argv[1]url2 =sys.argv[2]url3 =sys.argv[3]main(url,url2,url3)。

图像处理源代码

图像处理源代码

去噪function y= quzaoI= imread('4.jpg'); %读取图像f=rgb2gray(I);%转化成灰度图subplot(3,2,1);% 分割2*3个窗口。

取第一个窗口,下面在第一个窗口处显示图像imshow (f);%显示灰度图title('原图')%给显示的图像命名为“原始图”subplot(3,2,3), imshow(f),title('原图');subplot(3,2,5), imshow(f);title('原图');[m n]=size(f); %获取灰度图的大小f=im2double(f);%转换f为双精度型c=1/9*[1 1 1;1 1 1;1 1 1]; %3*3模板for i=1:mfor j=1:nL=f(i:i,j:j).*c; %求点积G(i,j)=sum(sum(L));%求和endendG=imadjust(G,[0/255 255/255],[0 1]);subplot(3,2,2); imshow(G);%取第三个窗口title('3*3模板邻域平均')%命名为“3*3模板”K1=medfilt2(f,[3,3]);%3*3的窗口对f进行中值滤波subplot(3,2,4), imshow(K1),title('中值滤波后结果');X = im2double(f); % 转换成双精度类型%提取通道信息xr = X(:, :, 1);%自适应阈值-------------------------------------------------------------x4_r = den4(X, 'sym4', 2);% 恢复去噪后的图像x4 = cat(3, x4_r); % 自适应阈值x4=im2double(x4);%显示去噪后的图像subplot(3,2,6), imshow(x4);title('自适应阈值去噪');psnr1 = PSNR_color(K1, f)psnr2 = PSNR_color(x4, X)imwrite(x4,'qz2.jpg','jpg');imwrite(K1,'qz1.jpg','jpg');增强clear;clc;f = imread('qz2.jpg');g=im2double(f);%******************************************************************* %显示灰度图的直方图,进行直方图均衡化以后的图像g1 = histeq(g);figure,subplot(1,2,1),imhist(g),title('原图的直方图');subplot(1,2,2),imhist(g1),title('直方图均衡化后的直方图');pause;%******************************************************************* %利用高斯多峰值算法来对图像进行相应的直方图处理p= manualhist%交互输入双峰值参数理想值为(0.15,0.05,0.75,0.05,1,0.07,0.002)g2= histeq(g,p);figure,imhist(g2);subplot(2,2,1),imshow(g),title('原图');subplot(2,2,2),imshow(g1),title('普通直方图处理后的图');subplot(2,2,3),imshow(g2),title('高斯多峰值算法处理后的图');imwrite(g1,'zq1.jpg','jpg');imwrite(g2,'zq2.jpg','jpg');q=qingxi(g1);q=qingxi(g2);pause;%****************************************************************** %利用空间掩膜来对所处理的图像进行增强w = [0 1 0;1 -4 1;0 1 0];%产生([0 1 0;1 -4 1;0 1 0])的拉普拉斯算子;h = fspecial(type,para)% 其中type指定算子的类型,para 指定相应的参数;参数alpha用于控制算子形状,取值范围为[0,1],默认值为0.2w1 = [1 1 1;1 -8 1;1 1 1];%离散拉普拉斯算子的扩展模板g3 = im2double(g);g4 = im2double(g1);g5 = im2double(g2);g6 = g3 + imfilter(g3,w,'replicate');g7 = g3 + imfilter(g3,w1,'replicate');g8 = g4 + imfilter(g4,w,'replicate');g9 = g4 + imfilter(g4,w1,'replicate');g10 = g5 + imfilter(g5,w,'replicate');g11 = g5 + imfilter(g5,w1,'replicate');figure,subplot(2,3,1),imshow(g6);title('原图普通掩膜');subplot(2,3,4),imshow(g7);title('原图扩展掩膜');subplot(2,3,2),imshow(g8);title('直方图后普通掩膜');q=qingxi(g8);imwrite(g8,'zq3.jpg','jpg');subplot(2,3,5),imshow (g9);title('直方图后扩展掩膜');subplot(2,3,3),imshow(g10);title('高斯双峰后普通掩膜');imwrite(g10,'zq4.jpg','jpg');q=qingxi(g10);subplot(2,3,6),imshow(g11);title('高斯双峰后扩展掩膜');pause;%******************************************************************* %利用小波进行图片增强处理[c,s]=wavedec2(f,2,'sym4');%实现图像(即二维信号)的2层分解sizec=size(c);for i=1:sizec(2)if(c(i)>1000)c(i)=6*c(i);elsec(i)=0.005*c(i);endendxx=waverec2(c,s,'sym4');q=qingxi(xx);figure;subplot(1,2,1);imshow(f);title('原图');subplot(1,2,2);imshow(xx);title('小波增强图像'); imwrite(xx,'zq5.jpg','jpg');神经网络clcclose all;P=[0.6192;0.5628;0.6208;0.5000;0.6155;0.6182;0.4210;0.0433;0.1094;0.1910;0.3023;0.2539;0.3215;0.3927;0.3604;0.3649;0.3283;0.4050;]';%数据输入(弧度)T=[0; 0; 0; 0; 0; 0; 0; 2; 2; 2; 2; 2; 2; 1; 1; 1; 1; 1;]';%数据的输出net=newff([0 1],[30,1],{'tansig','purelin'});%隐含层有30个神经元,输出层有一个神经元。

【谷速代码】matlab源码程序 MRF变化检测

【谷速代码】matlab源码程序 MRF变化检测

tict1=imread('imageimage1.bmp');%读取图片t2=imread('imageimage2.bmp');%读取图片% figure;% imshow(t1);% figure;% imshow(t2);r=(double(t1)+1)./(double(t2)+1);%求两幅图片的比值u=double(im2uint8(mat2gray(r)))+1;%比值图像T_yuzhi=zuixiaocuofen(t1,t2);%最小错分概率求阈值bianhua=(u>T_yuzhi);%求初次变化图像[hang,lie]=size(t1);window0=(bianhua==0);window1=(bianhua==1);k10=sum(sum(log(u).*window0))/sum(sum(window0));%不变部分均值k11=sum(sum(log(u).*window1))/sum(sum(window1));%变化部分均值k20=sum(sum(((log(u)-k10).^2).*window0))/(sum(sum(window0))-1);%求不变部分的方差k21=sum(sum(((log(u)-k11).^2).*window1))/(sum(sum(window1))-1);%求变化部分的方差XX1=wextend('2D','sym',bianhua,[1,1]);%四周扩展一个像素m0=zeros(hang,lie);m1=zeros(hang,lie);%%%%%%%%%%%%%%%%%%%%%%%%求k像素邻域相同标记的个数%%%%%%%%%%%%%%for i=2:hang+1for j=2:lie+1window3=XX1(i-1:i+1,j-1:j+1);if XX1(i,j)==0m0(i-1,j-1)=8-sum(sum(window3));m1(i-1,j-1)=sum(sum(window3));elsem0(i-1,j-1)=9-sum(sum(window3));m1(i-1,j-1)=sum(sum(window3))-1;endendendU0=((log(u)-k10).^2-k20*log(k20))/(2*k20)-0.3*m0;%求不变假设下的能量函数U1=((log(u)-k11).^2-k21*log(k21))/(2*k21)-0.3*m1;%求变化假设下的能量函数bianhua1=(U0>U1);%第一次得到的变化图像chazhi=1;while chazhi>1.5e-3p0=exp(-U0)./(exp(-U0)+exp(-U1));p1=exp(-U1)./(exp(-U0)+exp(-U1));w0=(p0>p1).*p0;w1=(p1>p0).*p1;k10=sum(sum(w0.*log(u)))/sum(sum(w0));%求不变部分的均值k11=sum(sum(w1.*log(u)))/sum(sum(w1));%求变化部分的均值k20=sum(sum(((log(u)-k10).^2).*w0))/sum(sum(w0));%求不变部分的方差k21=sum(sum(((log(u)-k11).^2).*w1))/sum(sum(w1));%求变化部分的方差disp('求步长');buchang=newton(w0,w1,m0,m1);%牛顿-拉夫逊算法求步长因子XX1=wextend('2D','sym',bianhua1,[1,1]);for i=2:hang+1for j=2:lie+1window3=XX1(i-1:i+1,j-1:j+1);if XX1(i,j)==0m0(i-1,j-1)=8-sum(sum(window3));elsem0(i-1,j-1)=9-sum(sum(window3));endif XX1(i,j)==0m1(i-1,j-1)=sum(sum(window3));elsem1(i-1,j-1)=sum(sum(window3))-1;endendendU0=((log(u)-k10).^2-k20*log(k20))/(2*k20)-buchang*m0;U1=((log(u)-k11).^2-k21*log(k21))/(2*k21)-buchang*m1;bianhua2=(U0>U1);chazhi=sum(sum(abs(bianhua1-bianhua2)))/(hang*lie);fprintf('连续两次的结果差值=%i\n',chazhi)bianhua1=bianhua2;endb = bwmorph(bianhua1,'clean',Inf);%去除孤立点bx3 = im2double(b);B1 = ones(7,7);cs1 = conv2(x3,B1,'same');cs1 = x3.*cs1;for c3 = 2 : hangfor d3 = 2:lieif cs1(c3,d3) < 24cs1(c3,d3) = 0;elsecs1(c3,d3) = 1;endendendfigure;imshow(bianhua1);title('变化图像11111111');imwrite(bianhua1,'实验二5.bmp');tocfunction a=df(x,w0,w1,m0,m1)a=-sum(sum(((m0.^2.*exp(x*m0)+m1.^2.*exp(x*m1)).*(exp(x*m0)+exp(x*m1))-(m0.*exp(x*m0) +m1.*exp(x*m1)).^2)./((exp(x*m0)+exp(x*m1)).^2)));endfunction a=f(x,w0,w1,m0,m1)a=sum(sum(w0.*m0+w1.*m1))-sum(sum((m0.*exp(x*m0)+m1.*exp(x*m1))./(exp(x*m0)+exp(x* m1))));endfunction x=newton(w0,w1,m0,m1)% x=0.8;% while f(x,w0,w1,m0,m1)/df(x,w0,w1,m0,m1)<1e-2% x=x-f(x,w0,w1,m0,m1)/df(x,w0,w1,m0,m1);% end% a=x;% endres=1;p1=0.265;while abs(res)>0.3format long% i=1;% n=input('The Number of Iterations =');x=p1;% while i<=np1=x-((f(x,w0,w1,m0,m1))/(df(x,w0,w1,m0,m1)));res=f(p1,w0,w1,m0,m1);fprintf('jieguo=%i\n',res);fprintf('zibianliang=%i\n',p1);x=p1;if abs(res)<=0.3fprintf('The root is = %i\n',p1);fprintf('The Number of Iterations = %i\n',i);fprintf('Zeeshan');breakend% i = i+1;% x=p1;end% if abs(res)>e% fprintf('The method is not Converging');% endend% res=1;% while res>3e-1% p1=x-((f(x,w0,w1,m0,m1))/(df(x,w0,w1,m0,m1)));% res=f(p1,w0,w1,m0,m1);% x=p1;% end% end%————基于最小错分概率的遥感影像变化检测方法——————%————首先利用差影法取出差值影像,利用最小错——————%————分概率的计算方式计算变化阀值,提取出重——————%————要的变化区域,最后采用去噪扫描和形态学——————%————的方式剔除噪声带来的虚假变化。

图像变化检测实例及源代码

图像变化检测实例及源代码

智能计算导论课程实验报告2011年6月27日智能计算导论课程实验报告1实验结果1.1Berma图1-1 SAR图像1(1999.4)图1-2 SAR图像2(1999.2)图1-3 变化检测结果图1-4 变化检测结果错误像素分布(包括漏检像素和错检像素)表格1-1 变化检测结果统计1.2墨西哥市郊图1-5 SAR图像1(2002.5)图1-6 SAR图像2(2005.4)图1-7 变化检测结果图1-8 变化检测结果错误像素分布(包括漏检像素和错检像素)表格1-2 变化检测结果统计2结果分析1.由错误像素分布图,我们可以看出,大部分错误像素点集中在变化区域的边缘,这主要与聚类的算法有关,改进聚类算法可以进一步减少错误像素点的个数。

另外,也可以改变领域位置指示集的形状,进而提升模糊差异图的精确度。

2.针对不同的图像,对双边滤波器使用不同的参数,才能达到最好的效果。

3算法流程图图3-1 算法流程图4参考文献1.Image Change Detection Algorithms: A Systematic Survey, Richard J. Radke, Member, IEEE,Srinivas Andra, Student Member, IEEE, Omar Al-Kofahi, and Badrinath Roysam, Member, IEEE, Student Member, IEEE2.SAR变化检测技术发展综述, 陈富龙,张红,王超5程序代码clear allclose allclcI1=imread('2002.5.bmp');I2=imread('2005.4.bmp'); I1=rgb2gray(I1);I2=rgb2gray(I2);I1=im2double(I1);I2=im2double(I2);%D=I2-I1;%imshow(D,[])%%[m,n]=size(I1);DI=zeros(m,n);for ii=1:mfor jj=1:nDI1=0;DI2=0;if ii>1&&jj>1&&ii<m&&jj<nfor iii=ii-1:ii+1for jjj=jj-1:jj+1DI1=DI1+min(I1(iii,jjj),I2(iii,j jj));DI2=DI2+max(I1(iii,jjj),I2(iii,j jj));endendelseif ii==1&&jj~=1&&jj~=nfor iii=ii:ii+1for jjj=jj-1:jj+1DI1=DI1+min(I1(iii,jjj),I2(iii,j jj));DI2=DI2+max(I1(iii,jjj),I2(iii,j jj));endendelseif ii==m&&jj~=1&&jj~=nfor iii=ii-1:iifor jjj=jj-1:jj+1DI1=DI1+min(I1(iii,jjj),I2(iii,j jj));DI2=DI2+max(I1(iii,jjj),I2(iii,j jj));endendelseif jj==1&&ii~=1&&ii~=mfor iii=ii-1:ii+1for jjj=jj:jj+1DI1=DI1+min(I1(iii,jjj),I2(iii,j jj));DI2=DI2+max(I1(iii,jjj),I2(iii,j jj));endendelseif jj==n&&ii~=1&&ii~=mfor iii=ii-1:ii+1for jjj=jj-1:jjDI1=DI1+min(I1(iii,jjj),I2(iii,j jj));DI2=DI2+max(I1(iii,jjj),I2(iii,j jj));endendelseif ii==1&&jj==1for iii=ii:ii+1for jjj=jj:jj+1DI1=DI1+min(I1(iii,jjj),I2(iii,j jj));DI2=DI2+max(I1(iii,jjj),I2(iii,j jj));endendelseif ii==1&&jj==nfor iii=ii:ii+1for jjj=jj-1:jjDI1=DI1+min(I1(iii,jjj),I2(iii,j jj));DI2=DI2+max(I1(iii,jjj),I2(iii,j jj));endendelseif ii==m&&jj==1for iii=ii-1:iifor jjj=jj:jj+1DI1=DI1+min(I1(iii,jjj),I2(iii,j jj));DI2=DI2+max(I1(iii,jjj),I2(iii,j jj));endendelseif ii==m&&jj==nfor iii=ii-1:iifor jjj=jj-1:jj DI1=DI1+min(I1(iii,jjj),I2(iii,j jj));DI2=DI2+max(I1(iii,jjj),I2(iii,j jj));endendendDI(ii,jj)=DI1/DI2;endendfigure,imshow(DI,[])%% bilateral filter%DI=bilateralfilter(DI, [m n], 8, 0.6);DI=fastbilateral(uint8(DI),25,0. 4);figure,imshow(DI,[])%% fcmIM=DI;IMM=cat(3,IM,IM);cc1=8;cc2=200;ttFcm=0;while(ttFcm<15)ttFcm=ttFcm+1;c1=repmat(cc1,m,n);c2=repmat(cc2,m,n);c=cat(3,c1,c2);ree=repmat(0.000001,m,n);ree1=cat(3,ree,ree);distance=IMM-c;distance=distance.*distance+ree1 ;daoShu=1./distance;daoShu2=daoShu(:,:,1)+daoShu(:,: ,2);distance1=distance(:,:,1).*daoSh u2;u1=1./distance1;distance2=distance(:,:,2).*daoSh u2;u2=1./distance2;ccc1=sum(u1.*u1.*IM)/sum(u1.*u1) ;ccc2=sum(u2.*u2.*IM)/sum(u2.*u2) ;tmpMatrix=[abs(cc1-ccc1)/cc1,abs (cc2-ccc2)/cc2];pp=cat(3,u1,u2);for i=1:mfor j=1:nifmax(pp(i,j,:))==u1(i,j)IX2(i,j)=1;elseifmax(pp(i,j,:))==u2(i,j)IX2(i,j)=2;endendend%ÅнáÊøÌõ¼þif max(tmpMatrix)<0.0001break;elsecc1=ccc1;cc2=ccc2;endfor i=1:mfor j=1:nif IX2(i,j)==2IMMM(i,j)=255;elseif IX2(i,j)==1IMMM(i,j)=0;endendendendfor i=1:mfor j=1:nif IX2(i,j)==2IMMM(i,j)=255;elseif IX2(i,j)==1IMMM(i,j)=0;endendend%ÏÔʾ×îÖÕ·ÖÀà½á¹ûfigure,imshow(IMMM,[]);imwrite(IMMM,'mask.bmp')%figure,imshow('reference.bmp'); %end%%mask=imread('mask.bmp');mask1=im2bw(mask,0.5);sum(sum(mask1))ref=imread('reference.jpg');ref1=im2bw(ref,0.5);sum(sum(ref1))error=xor(mask1,ref1);figure,imshow(error,[])figure,imshow(and(mask1,ref1),[] )FP=0;FN=0;for i=1:mfor j=1:nifmask1(i,j)==1&&ref1(i,j)==0FP=FP+1;endifmask1(i,j)==0&&ref1(i,j)==1FN=FN+1;endendendFPFNsum(sum(and(mask1,ref1)))。

K-means算法实现遥感影像(SAR影像)变化检测

K-means算法实现遥感影像(SAR影像)变化检测

K-means算法实现遥感影像(SAR影像)变化检测这是我接触算法的第⼀个程序,是CSDN的⼀位⼤佬帮我写的,今天放在这⾥仅供学习。

内容是利⽤K-means算法实现遥感影像(SAR影像)变化检测图像见右侧相册#SAR Image change detection by k-means algorithm#author:**#date:2020-07-08'''-------------调⽤库-----------------------------------------------------------------------------'''import matplotlib.pyplot as pltimport matplotlib.image as mpimgimport numpy as npimport pandas as pdimport math'''-----------定义两图⽚取对数函数----------------------------------------------------------------'''def lograte(img1,img2):[rows, cols, chls] = img1.shape #把图⽚像素的⾏数,列数,通道数返回给rows,cols,chlsrate_img = np.zeros([rows, cols, chls]) #初始化矩阵log_img = np.zeros([rows, cols, chls])for i in range(rows): #遍历每⼀个像素for j in range(cols):for k in range(chls):rate_img[i, j, k] = np.true_divide(img1[i, j, k]+0.1, img2[i, j, k]+0.1) #两图像做除后将数据追加到初始化矩阵中-------->>为何要作除log_img[i, j, k] = abs(math.log(rate_img[i, j, k])) #差异图取对数后将数据追加到初始化矩阵中------------->>为何取对数return log_img #得到取对数后的变化检测差异图(矩阵)'''--------调⽤K-means算法对提取到的变化信息分类并显⽰图⽚-----------------------------------------''''''需要完成任务:①初始聚类中⼼的选择(2个)②点与聚类中⼼的距离计算,后按最⼩距离聚类③更新点与聚类中⼼距离和最⼩点'''def kmeans(log_img):[rows, cols, chls] = log_img.shape #初始化矩阵log_img_one = log_img[:,:,0] #通道数置为0pre_img = log_img_one.reshape((rows * cols, 1)) #压缩维度,变为rows * cols⾏,1列k=2 #聚类中⼼个数list_img = [] #初始聚类中⼼列表while len(list_img) < k: #只选两个点后跳出#while list_img.__len__() < k: #__len__()可以返回容器中元素的个数.len是获取集合长度的函数,它通过调⽤对象的__len__⽅法来⼯作n = np.random.randint(0, pre_img.shape[0], 1) #以1为步长,随机选取0到⾏数间的数据 .shape[0]为图像⾼度(矩阵⾏数)[1]为宽度(列数)[2]为通道数if n not in list_img:list_img.append(n[0]) #选取初始聚类中pre_point = pre_img[np.array(list_img)] #初始图像的初始聚类中⼼点(矩阵形式)#①定义⼀个空列表#②while循环,当列表⾥的个数等于给定的聚类中⼼时停⽌#③从0到⾏数值之间以1为步长,随机选数字#④如果不再列表中则加⼊#⑤找到初始聚类点,跳出循环#⑥⾄此,完成了初始聚类中⼼的选择c=0 #定义迭代次数while True: #⼀直循环,知道遇到break跳出distance = [np.sum(np.sqrt((pre_img - i) ** 2) , axis=1) for i in pre_point]#计算每个点与两聚类中⼼的距离之和now_point = np.argmin(distance, axis=0) #距离之和最⼩的点为聚类中⼼(返回索引)now_piont_distance = np.array( list([np.average(pre_img[now_point == i], axis=0) for i in range(k)]) )c+=0if np.sum(now_piont_distance - pre_point) < 1e-5 or c>50:breakelse:pre_point = now_piont_distance#①欧⽒距离的计算#②将距离最⼩点选出#③计算新选点距离,⽅便与前聚类中⼼⽐较#④若聚类中⼼不再变化或者迭代次数⼤于50次跳出#⑤差异信息的分类完成labels=now_pointres = labels.reshape((rows, cols))ima = np.zeros([rows, cols, chls]) #初始化聚类中⼼ima[:, :, 0] = resima[:, :, 1] = resima[:, :, 2] = res #恢复三通道plt.title("K-means-Change Detection Results")plt.imshow(ima) plt.axis('off')plt.show()if __name__ == '__main__':img1 = mpimg.imread('1999.04.bmp')img2 = mpimg.imread('1999.05.bmp')dim = lograte(img1,img2)dim = (dim*255).astype(np.double)kmeans(dim)。

python图像判断,清晰度(明暗),彩色与黑白实例

python图像判断,清晰度(明暗),彩色与黑白实例

python图像判断,清晰度(明暗),彩⾊与⿊⽩实例1,判断图像清晰度,明暗,原理,Laplacian算法。

偏暗的图⽚,⼆阶导数⼩,区域变化⼩;偏亮的图⽚,⼆阶导数⼤,区域变化快。

import cv2def getImageVar(imgPath):image = cv2.imread(imgPath)img2gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)imageVar = placian(img2gray, cv2.CV_64F).var()return imageVarimageVar = getImageVar("./lena.jpg")print(imageVar)输出结果:2119.09135813516972,判断⿊⽩或彩⾊图⽚原理,通道变化def is_color_image(url):im=Image.open(url)pix=im.convert('RGB')width=im.size[0]height=im.size[1]oimage_color_type="Grey Image"is_color=[]for x in range(width):for y in range(height):r,g,b=pix.getpixel((x,y))r=int(r)g=int(g)b=int(b)if (r==g) and (g==b):passelse:oimage_color_type='Color Image'return oimage_color_type补充知识:求图⽚的平均亮度图像相关开发中,有时我们需要知道和了解图⽚的亮度这⼀信息,例如判断图⽚是否曝光严重过度或者太⿊什么都看不清。

那么怎么去获取到图⽚的平均亮度这⼀信息呢?⼀、YUV 图⽚⼀般相机的原始数据类型就是 YUV 格式,这种格式下很容易求得亮度,因为它的 Y 通道就是亮度通道,我们只需要求得 Y 通道的平均值就可以了。

变化检测算法 python代码

变化检测算法 python代码

变化检测算法 Python代码随着数据科学和机器学习的发展,变化检测算法在许多领域中变得越来越重要。

变化检测算法是一种用于检测数据中突变或变化的技术,可以应用于诸如金融市场分析、医学图像处理、环境监测等各种领域。

在本文中,我们将介绍如何用Python编写一个简单但有效的变化检测算法。

1. 安装必要的库为了编写变化检测算法,我们需要安装Python的一些核心库,包括Numpy、Matplotlib和Scipy。

这些库将帮助我们处理和可视化数据,并实现变化检测算法的逻辑。

```pythonpip install numpypip install matplotlibpip install scipy```2. 导入必要的库一旦我们安装了这些库,我们就可以在Python代码中导入它们,并开始编写变化检测算法。

```pythonimport numpy as npimport matplotlib.pyplot as pltfrom scipy.stats import norm```3. 实现变化检测算法接下来,我们将实现一个简单的变化检测算法。

在这个例子中,我们将使用一个基于正态分布的简单算法来检测数据中的突变。

```pythondef change_detection(data, threshold):mean = np.mean(data)std = np.std(data)for i in range(len(data)):if abs(data[i] - mean) > threshold * std:return ireturn -1```在这个代码中,我们首先计算数据的均值和标准差。

我们遍历数据并检查每个数据点是否超出了阈值范围。

如果是的话,我们就返回这个数据点的索引,表示数据发生了突变。

如果没有发生突变,我们就返回-1。

4. 测试算法为了测试我们的变化检测算法,我们可以生成一个简单的模拟数据集,并将算法应用于这个数据集。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

智能计算导论课程实验报告2011年6月27日智能计算导论课程实验报告1实验结果1.1Berma图1-1 SAR图像1(1999.4)图1-2 SAR图像2(1999.2)图1-3 变化检测结果图1-4 变化检测结果错误像素分布(包括漏检像素和错检像素)表格1-1 变化检测结果统计1.2墨西哥市郊图1-5 SAR图像1(2002.5)图1-6 SAR图像2(2005.4)图1-7 变化检测结果图1-8 变化检测结果错误像素分布(包括漏检像素和错检像素)表格1-2 变化检测结果统计2结果分析1.由错误像素分布图,我们可以看出,大部分错误像素点集中在变化区域的边缘,这主要与聚类的算法有关,改进聚类算法可以进一步减少错误像素点的个数。

另外,也可以改变领域位置指示集的形状,进而提升模糊差异图的精确度。

2.针对不同的图像,对双边滤波器使用不同的参数,才能达到最好的效果。

3算法流程图图3-1 算法流程图4参考文献1.Image Change Detection Algorithms: A Systematic Survey, Richard J. Radke, Member, IEEE,Srinivas Andra, Student Member, IEEE, Omar Al-Kofahi, and Badrinath Roysam, Member, IEEE, Student Member, IEEE2.SAR变化检测技术发展综述, 陈富龙,张红,王超5程序代码clear allclose allclcI1=imread('2002.5.bmp');I2=imread('2005.4.bmp'); I1=rgb2gray(I1);I2=rgb2gray(I2);I1=im2double(I1);I2=im2double(I2);%D=I2-I1;%imshow(D,[])%%[m,n]=size(I1);DI=zeros(m,n);for ii=1:mfor jj=1:nDI1=0;DI2=0;if ii>1&&jj>1&&ii<m&&jj<nfor iii=ii-1:ii+1for jjj=jj-1:jj+1DI1=DI1+min(I1(iii,jjj),I2(iii,j jj));DI2=DI2+max(I1(iii,jjj),I2(iii,j jj));endendelseif ii==1&&jj~=1&&jj~=nfor iii=ii:ii+1for jjj=jj-1:jj+1DI1=DI1+min(I1(iii,jjj),I2(iii,j jj));DI2=DI2+max(I1(iii,jjj),I2(iii,j jj));endendelseif ii==m&&jj~=1&&jj~=nfor iii=ii-1:iifor jjj=jj-1:jj+1DI1=DI1+min(I1(iii,jjj),I2(iii,j jj));DI2=DI2+max(I1(iii,jjj),I2(iii,j jj));endendelseif jj==1&&ii~=1&&ii~=mfor iii=ii-1:ii+1for jjj=jj:jj+1DI1=DI1+min(I1(iii,jjj),I2(iii,j jj));DI2=DI2+max(I1(iii,jjj),I2(iii,j jj));endendelseif jj==n&&ii~=1&&ii~=mfor iii=ii-1:ii+1for jjj=jj-1:jjDI1=DI1+min(I1(iii,jjj),I2(iii,j jj));DI2=DI2+max(I1(iii,jjj),I2(iii,j jj));endendelseif ii==1&&jj==1for iii=ii:ii+1for jjj=jj:jj+1DI1=DI1+min(I1(iii,jjj),I2(iii,j jj));DI2=DI2+max(I1(iii,jjj),I2(iii,j jj));endendelseif ii==1&&jj==nfor iii=ii:ii+1for jjj=jj-1:jjDI1=DI1+min(I1(iii,jjj),I2(iii,j jj));DI2=DI2+max(I1(iii,jjj),I2(iii,j jj));endendelseif ii==m&&jj==1for iii=ii-1:iifor jjj=jj:jj+1DI1=DI1+min(I1(iii,jjj),I2(iii,j jj));DI2=DI2+max(I1(iii,jjj),I2(iii,j jj));endendelseif ii==m&&jj==nfor iii=ii-1:iifor jjj=jj-1:jj DI1=DI1+min(I1(iii,jjj),I2(iii,j jj));DI2=DI2+max(I1(iii,jjj),I2(iii,j jj));endendendDI(ii,jj)=DI1/DI2;endendfigure,imshow(DI,[])%% bilateral filter%DI=bilateralfilter(DI, [m n], 8, 0.6);DI=fastbilateral(uint8(DI),25,0. 4);figure,imshow(DI,[])%% fcmIM=DI;IMM=cat(3,IM,IM);cc1=8;cc2=200;ttFcm=0;while(ttFcm<15)ttFcm=ttFcm+1;c1=repmat(cc1,m,n);c2=repmat(cc2,m,n);c=cat(3,c1,c2);ree=repmat(0.000001,m,n);ree1=cat(3,ree,ree);distance=IMM-c;distance=distance.*distance+ree1 ;daoShu=1./distance;daoShu2=daoShu(:,:,1)+daoShu(:,: ,2);distance1=distance(:,:,1).*daoSh u2;u1=1./distance1;distance2=distance(:,:,2).*daoSh u2;u2=1./distance2;ccc1=sum(u1.*u1.*IM)/sum(u1.*u1) ;ccc2=sum(u2.*u2.*IM)/sum(u2.*u2) ;tmpMatrix=[abs(cc1-ccc1)/cc1,abs (cc2-ccc2)/cc2];pp=cat(3,u1,u2);for i=1:mfor j=1:nifmax(pp(i,j,:))==u1(i,j)IX2(i,j)=1;elseifmax(pp(i,j,:))==u2(i,j)IX2(i,j)=2;endendend%ÅнáÊøÌõ¼þif max(tmpMatrix)<0.0001break;elsecc1=ccc1;cc2=ccc2;endfor i=1:mfor j=1:nif IX2(i,j)==2IMMM(i,j)=255;elseif IX2(i,j)==1IMMM(i,j)=0;endendendendfor i=1:mfor j=1:nif IX2(i,j)==2IMMM(i,j)=255;elseif IX2(i,j)==1IMMM(i,j)=0;endendend%ÏÔʾ×îÖÕ·ÖÀà½á¹ûfigure,imshow(IMMM,[]);imwrite(IMMM,'mask.bmp')%figure,imshow('reference.bmp'); %end%%mask=imread('mask.bmp');mask1=im2bw(mask,0.5);sum(sum(mask1))ref=imread('reference.jpg');ref1=im2bw(ref,0.5);sum(sum(ref1))error=xor(mask1,ref1);figure,imshow(error,[])figure,imshow(and(mask1,ref1),[] )FP=0;FN=0;for i=1:mfor j=1:nifmask1(i,j)==1&&ref1(i,j)==0FP=FP+1;endifmask1(i,j)==0&&ref1(i,j)==1FN=FN+1;endendendFPFNsum(sum(and(mask1,ref1)))。

相关文档
最新文档