Matlab读取带有地理信息的图像
目前需要读取遥感影像并对像元值进行重新计算后再输出图像。
代码如下:
[A, R]= geotiffread('pathname:\ filename') %得到文件的像元值矩阵A和地理信息R
B= A.* 0.0001 %将A进行处理,得到所需要的值
geotiffwrite('pathname:\ newfilename', B, R) %重新输出图像
但是系统显示图片上的错误。
我看到geotiffwrite参考页里面的syntax第一行就是这么写的:geotiffwrite(filename,A,R)。不知道错在哪。
geotiffread
Read GeoTIFF file
Syntax
[A,R] = geotiffread(filename)
[X,cmap,R] = geotiffread(filename)
[A,refmat,bbox] = geotiffread(filename)
[X,cmap,refmat,bbox] = geotiffread(filename)
[___] = geotiffread(filename,idx)
[___] = geotiffread(url,___)
[A,R] = geotiffread(filename) reads a georeferenced grayscale, RGB, or multispectral image or data grid from the GeoTIFF file specified by filename into A and creates a spatial referencing object, R.
MATLAB 遥感影像的读写操作,带空间坐标信息!
filepath=''E:\Sciencetific Work\北洛河_状头.tif';'
[Data, R] = geotiffread(filepath); %读取带有空间信息的地理数据,返回数据,和地理栅格空间参考信息spatialref.GeoRasterReference
info = geotiffinfo('shanghai_roi_WGS2.tif'); %geotif的信息
geotiffwrite('shanghai_roi_WGS5.tif',Y,R, 'GeoKeyDirectoryTag',
info.GeoTIFFTags.GeoKeyDirectoryTag); %写出带有地理信息的geotif文件
MATLAB中使用Inf和-Inf (infinite)分别代表正无穷量和负无穷量,NaN表示非数值量 (Not a Number)
Matlab中提示:Maximum recursion
limit of 500 reached. Warning:Function tic has the same name as MATLAB builtin. We suggest you rename the function to avoid a potential name conflict.
解决方法:You accidentally named one of your own files tic.m 重命名即可
Matlab中读取图片灰度值:
imread函数:Read image from graphics file
example: I=imread(‘C:\Users\Administrators\Desktop\beforeclass’);
D=rgb2gray(I); 将彩色图像转换为灰度图像
D包含的就是灰度值
imcrop函数:Crop Image 裁剪图像
I=imread('图像名字(带扩展名及路径)');%首先读入一幅待裁剪的图像
I2=imcrop(I,[a b c d]);%利用裁剪函数裁剪图像,其中,(a,b)表示裁剪后左上角像素在原图像中的位置;c表示裁剪后图像的宽,d表示裁剪后图像的高
关于矩形区域[Xmin Ymin Width Height],Xmin是横向第Xmin个像素,Ymin是纵向第Ymin个像素;
imhist函数:显示区域的像素值和灰度值的关系
功能:显示图像的直方图。
输入数据类型可以是无符号8位、16位、有符号16位、单精浮点、字符型、逻辑型等数据。
用法:
imhist(I,n) 计算和显示图像I的直方图,n为指定的灰度级数目,默认为256。如果I是二值图像,那么n仅有两个值。
imhist(X,map) 计算和显示索引图像x的直方图,map为调色板。
[counts,x]= imhist(...) 返回直方图数据向量counts或相应的色彩值向量x。
举例:
I=imread('rice.tif')
imshow(I)
figure,imhist(I)
imhist只能对灰度图像画直方图,所以那样直接画是不行的,我给你改了一下,你再试试
L=imread('lily.tif');
L=rgb2gray(L);
subplot(1,2,1);
imhist(L);
This example illustrates how to use impixel to get pixel values.
1. Display an image.
imshow canoe.tif
2. Call impixel. When called with no input arguments, impixel associates itself with the image in the current axes.
vals = impixel
3. Select the points you
want to examine in the image by clicking the mouse. impixel places a star at
each point you select.
4. When you are finished selecting points, press Return. impixel returns the pixel values in an n-by-3 array, where n is the number of points you selected. The stars used to indicate selected points disappear from the image.
pixel_values =
0.1294 0.1294 0.1294
0.5176 0 0
0.7765 0.6118 0.4196
1、使用imcrop做图像剪切,或用矩形块提取图像块区域;
2、可以使用pixval on(低版本),或impixelinfo;
clc; clear all; close all;
figure;
imshow('rice.png');
impixelinfo
3、使用Figure窗口的“Data cursor”图标来查看;
4、使用imview来查看;
clc; clear all; close all;
imview('rice.png');
strcmp:Compare strings withcase sensitivity
C/C++函数,比较两个字符串
设这两个字符串为str1,str2,
若str1==str2,则返回零;
若str1 若str1>str2,则返回正数。 matlab中函数,strcmp(s1,s2) 判断两个字符串s1和s2是否相同,相同返回true ,不同返回false strcat 即 Strings Catenate,横向连接字符串。 语法 combinedStr= strcat(s1,s2, ...,sN) 描述 将数组s1,s2,...,sN水平地连接成单个字符串,并保存于变量combinedStr中。如果任一参数是元胞数组,那么结果combinedStr 是一个元胞数组,否则,combinedStr是一个字符数组。 fread函数可从文件中读取二进制数据 语法: A = fread(fid, count) A = fread(fid, count, precision) 其中fid为指针所指文件中的当前位置,count指读取的数据个数, precision表示以什么格式的数据类型读取数据。 fclose(fid); closes an open file. fileID is an integer file identifier obtained from fopen matlab中这两个字符串查找的函数findstr(), strfind()表明上看起来用法相似,效果也相似。一. findstr(s1,s2)--在较长的字符串中查找较短的字符串出现的次数,并返回其位置,因此无论s1,s2哪个为长字符串,位置在前在后都没有关系。例: s = 'Find the starting indices of the shorter string.'; findstr(s, 'the') ans = 6 30 findstr('the', s) ans = 6 30 二. strfind(s1,s2)--or strfind(s1,pattern),因此其意思在s1中搜索pattern。 例: S = 'Find the starting indices of the pattern string'; strfind(S, 'in') ans = 2 15 19 45 strfind(S, 'In') ans = [] 注意,第一个函数findstr函数中,不能识别元胞数组,该函数只能用于字符串中。而第二个函数strfind中,S可以是元胞数组格式的字符串。通过cell2mat()可以把cell结构转成数据,findstr(),strfind()函数只能对一维字符串数据进行操作,若是二维字符串则得使用别的函数。 在matlab中,无论是内建函数还是工具箱函数,2很常见, 这可能是因为2英文two和to发音相同。而2写起来也比较简单。 所以很多转换类函数都用2来命名而非to。 比如string to number, 不是命名为strTonum而是str2num。 Convert string to number Matlab中读取txt文件 textread函数:[ID,X,Y,DEPTH]=textread(‘C:\Users\Administrator\Desktop\robertisland1.txt’,’%d%f %f %f’,’headerlines’,1); headerlines表示开头跳过几行(有的文件开头有说明文字) 如何将MATLAB运行结果写入txt文件 a = [1,2,3,4,5,6,7,8,9]; fp = fopen('D:\ztq.txt','wt'); for i =1 : 9 fprintf(fp, '%d', a(i)); end fclose(fp); 将数组a导入到D盘中的ztq.txt中。 矩阵的合并: C=[A B] 在水平方向上合并矩阵A和B C=[A;B] 在竖直方向上合并A和B matlab中生成斐波那契数列: function a=fib(n) % 生成长度为n的斐波那契数列 if n==1 a=1; elseif n==2 a=[1 1]; else b=fib(n-1); a=[b,b(end-1)+b(end)]; end 例子 fib(10) ans = 1 1 2 3 5 8 13 21 34 55 Matlab中判断一个值发生变化 比如判断的变量为X。循环前设两个变量,VarA=0和VarB。在循环中:VarB=VarA,VarA=X(这两句顺序很重要),然后用if语句判断VarA是否等于VarB。如果相等说明X和上一个X相同。 MATLAB显示输出数据主要有三种方式,一种是直接在命令行输入数据项并且不加“;”符号,另外两种是利用disp函数和fprintf函数实现 总的来说,使用fprintf最为灵活方便,可以输出任何格式 Matlab矩阵分割: 索引矩阵的一种特殊形式,不仅可以获得某个元素,也可获得某一行或某一列 I = A(i : j, m : n) %输出i到j行的m到n列 B1=Band(1:1000000;:) Matlab中把1-100这100个整数排成一个矩阵: x=1:100; X=reshape(x,m,n);%m 和n分别为要生成矩阵的行数和列数 或者通过linspace函数创建一维数组 y = linspace(1,100) &&和||是短路版本的逻辑与和逻辑或,称为short-circuit运算符。短路逻辑运算符的两边必须是逻辑标量值。比如单个逻辑变量,逻辑表达式都可以。 Matlab文件中出现asv格式文件 在MATLAB中编辑某个文件时,如果较长时间(系统默认是5分钟,可自行修改)没有对已经变动的文件进行保存,那么系统会自动保存,这就是asv文件,即automatically saved file或autosave的意思,只是备份文件。用记事本打开,和.m文件内容相同。 Matlab读取txt文件行数 越是底层的函数效率是越高的,只是使用不方便而已。MATLAB有一个fread函数,不过这是默认处理的是二进制文件,不过没有关系,文本文件只是一个编码而已,我们还是可以使用fread进行读取的。 tic; fid=fopen('data.csv','rt'); row=0; while ~foef(fid) row=row+sum(fread(fid,'*char')==char(10)); %计算其中的回车个数,其中10是回车的ASCII编码 %'*char'表示每次读取一个字符,*表示输出也是字符 %放心fread现在已经可以自动识别中文了,万一还是识别不了, % 请在fopen中指定文件编码格式,比如gbk end; fclose(fid); row; toc; matlab输出矩阵 如矩阵a a 不加分号即输出 disp(a) 即输出