matlab floor函数_基于matlab的交互式图像修改

ps是一款强大的图像处理软件,通常的图像处理都可以基于ps去做。但是一些专业的人士对图像有特殊需求,ps难以完成。例如遥感领域的tif图像含有地理参考,ps不能保证图像的头文件是否被修改甚至丢失。此外,遥感影像的像素灰度值不一定是uint8的类型,ps不一定能够保证像素值不被默认改变。

基于一个实际问题,现在需要交互改正遥感影像中制定区域的图像灰度值。采用matlab实现该功能。

若干相关函数介绍:

1)h = imrect;

该函数用于在显示的图像中交互框选图像部分区域,返回一个句柄结构体“h”,h中存储了框选区域的相关数据。

2)rect2 = getPosition(h);

该函数用于读取框选区域的范围参数,rect2是一个一行四列的矩阵,从左到右依次是最小列号、最小行号、列号增量、行号增量;

3)info=geotiffinfo(infilename);

该函数用于获取图像的投影参数,一般来讲,地理信息系统认可大地坐标的头文件,投影坐标图像的头文件也是被认可的,但是头文件中缺少投影定义,该函数可以获取投影定义的相关参数;

4)[~,geoinfoA] = geotiffread(infilename);

该函数用于获取图像的头文件。修改图像不会修改图像的头文件,所以这里先不介绍头文件的手动书写,只将原始头文件粘贴过来即可。

5)geotiffwrite('S_dem.tif',O_dem,geoinfoA,'GeoKeyDirectoryTag', info.GeoTIFFTags.GeoKeyDirectoryTag); 

该函数用于写出带有头文件的影像信息,输入参数依次是:'S_dem.tif'输出文件的文件名,O_dem输出图像矩阵,geoinfoA输出图像的头文件,'GeoKeyDirectoryTag'投影定义标题,info.GeoTIFFTags.GeoKeyDirectoryTag投影定义。

基于上述几个关键函数的完整代码如下:


%{读取一个dem图像文件,框选一块区域,将细小区域全部替换例如:框选草地部分,其中包含的其他信息全部替换为草地%}clear;clc;close all;infilename = 'DEM.tif';      % 输入文件的文件名O_dem = imread(infilename);  % 读取输入文件[r,c,~] = size(O_dem);       % 获取输入文件的尺寸main_value = input('输入替换值:'); % 需要保留的值(交互输入)figure('name','我的示例');   % 创建一个图层,图层名为“我的示例”while 1                     % 进入循环,框选修改图像imshow(O_dem);              % 显示读取的图像h = imrect;                 % 在图像中框选一个区域rect2 = getPosition(h);     % 获取框选区域的范围mincol = floor(rect2(1));            %最小列号(上边界)minrow = floor(rect2(2));            %最小行号(下边界)maxcol = floor(rect2(1) + rect2(3)); %最大列号(左边界)maxrow = floor(rect2(2) + rect2(4)); %最大行号(有边界)if maxrow > r || maxcol > c     % 如果框选区域过大,则跳出循环,不在对图像进行交互操作    break;endO_dem(minrow:maxrow,mincol:maxcol) = main_value;  % 用交互输入的灰度值代替框选区域的所有像素值clear h rect2 mincol minrow maxcol maxrow;        % 清空变量end[~,geoinfoA] = geotiffread(infilename);  % 获取DEM.tif的头文件info=geotiffinfo(infilename);            % 获取图像的投影信息imshow(O_dem);                           % 显示即将输出的图像文件geotiffwrite('S_dem.tif',O_dem,geoinfoA,'GeoKeyDirectoryTag', info.GeoTIFFTags.GeoKeyDirectoryTag);      %输出改变后的tif文件msgbox '运行完毕!';

下面演示一下具体操作和效果

1) 点云运行按钮

2) 手动输入一个需要替换的灰度值,例如48.156

3) 在跳出的图层中框选合适的位置,该区域的所有像素灰度值会被替换为手动输入的那个值

4) 重复上述操作,替修正所有待修正区域

5) 框选超出图像的区域造成框选错误,跳出循环体

6) 等待几秒,写出修正后的图像

原始图像:

2c8ad729db8e76aa765fe11a3d3706de.png

修正后图像

b1650e7176431e0867e0b04d16884f63.png

学到了就点个赞吧?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值