图像的灰度变换——图像旋转、图像的反色处理、对比度拉伸

2023-05-16

这次我们要处理的是对图像进行旋转操作,具体要求,如下:

       自定义一个图像的仿射变换函数,用于旋转给定的输入图像,该函数的输入参数包括处理前的图像和旋转角度。输入的角度为正数,表明处理结果为顺时针旋转,负数则为逆时针旋转,输出参数为处理后的图像。

       曾参考《数字图像处理(第三版)》一书中P51的公式编写过自己的图像“旋转”函数,但是在某些角度下,输出结果却发生了错误,至于原因,也由于时间关系,仍未思考出来。使用Matlab编程,原代码如下:

%自己写的函数
function []=myRotation(pho,angle)
im1=imread(pho);
subplot(121);
imshow(im1);
title('输入图像');
im1=double(im1);
[r,c,h]=size(im1);
 
R=angle*pi/180;
h2 = ceil(r*cos(R)+c*sin(R));
w2 = ceil(r*sin(R)+c*cos(R));
im2=zeros(h2,w2,h);
 
T=[sin(R) cos(R); cos(R) -sin(R)];
%invT=inv(T);
for i=1:h
    for x=1:h2
        for y=1:w2
            temp=([x y]-[0 r*sin(R)])/T;
            temp(1)=ceil(temp(1));
            temp(2)=ceil(temp(2));
            if temp(2)>0 && temp(2)<=r && temp(1)>0 && temp(1)<=c
                im2(x,y,i)=im1(temp(2),temp(1),i);
            end
        end
    end
end
subplot(122);
imshow(uint8(im2));
title('输出图像');

       另外,采用了一种方法(参考 点击打开链接),同样使用推导出来的公式,采用反向映射的方法,结合双线性内插,得出旋转后的图像。但是得出来的结果,如输入 180°,没有出现输出结果。参考后修改的程序如下:

function []=myRotation3(pho,angle)
im1=imread(pho);
im1=double(im1);
[m,n,h]=size(im1);
 
R = angle*pi/180;   %旋转角度
%新图像大小
m2 = ceil(m*cos(R)+n*sin(R));
n2 = ceil(m*sin(R)+n*cos(R));
 
u0= m*sin(R);%平移量
 
%变换矩阵   
T=[cos(R),sin(R);-sin(R),cos(R)];
L = zeros(m2,n2);
for i=1:h
    for u=1:n2
      for v=1:m2
        %新图像坐标变换到原图像坐标x和y中
        temp = T*([u;v]-[u0;0]);
        x= temp(1);
        y= temp(2);
        if x>=1 & x<=m & y>=1 & y<=n    %若变换出的x和y在原图像范围内
            x_low=floor(x);
            x_up=ceil(x);
            y_low=floor(y);
            y_up=ceil(y);
 			%双线性内插值
            p1=im1(x_low,y_low,i);
            p2=im1(x_up,y_low,i);
            p3=im1(x_low,y_low,i);
            p4=im1(x_up,y_up,i);
            s=x-x_low;
            t=y-y_low;
            L(u,v,i)=(1-s)*(1-t)*p1+(1-s)*t*p3+(1-t)*s*p2+s*t*p4;
        end
      end
    end
end
 
imshow(uint8(L));
title('输出图像');

而正确程序代码,则是通过研究参考 图像旋转算法原理点击打开链接),在只有原理的情况下,研究透,将其转化为 程序。MATLAB代码如下:

%这个旋转才没有bug
function []=myRotation(pho,angle)
im1=imread(pho);
subplot(121);
imshow(im1);
title('输入图像');
im1=double(im1);
[r,c,h]=size(im1);
 
%将角度单位化为弧度单位
R=-angle*pi/180;
%这样的宽高会出现BUG,原因不明
%h2 = ceil(r*cos(R)+c*sin(R));
%w2 = ceil(r*sin(R)+c*cos(R));
 
%将对角线作为旋转后图像的宽高
h2=ceil(sqrt(r*r+c*c));
w2=h2;
 
im2=zeros(h2,w2,h);
 
%旋转时x y的偏移量
dx=-0.5*w2*cos(R)-0.5*h2*sin(R)+0.5*c;
dy=0.5*w2*sin(R)-0.5*h2*cos(R)+0.5*r;
 
%采用反向映射
for i=1:h
    for x=1:h2
        for y=1:w2
            %由结果图像的坐标 得出 原来图像的坐标
            x0=ceil(x*cos(R)+y*sin(R)+dx); 
            y0=ceil(-x*sin(R)+y*cos(R)+dy);
            
            if x0>0 && x0<=r && y0>0 && y0<=c
                im2(x,y,i)=im1(x0,y0,i);
            end
        end
    end
end
%显示图像
subplot(122);
imshow(uint8(im2));
title('输出图像');


旋转45°——> myRotation('实验2_lena.bmp',45),结果如下:


旋转-45°——> myRotation('实验2_lena.bmp',-45),结果如下:


图像反色处理

       自定义一个函数,将输入图像进行反色处理,该函数输入参数为处理前的图像,输出参数为处理后的图像。

Matlab编程,代码如下:

function []=myFanse(pho)
im1 = imread(pho);
subplot(121);
imshow(im1);
title('输入图像');
im1 = double(im1);
[r c m] = size(im1);
im2 = zeros(r,c,m);
for i=1:m
for j=1:r
for k=1:c
im2(j,k,i)=255-im1(j,k,i); %由最高灰度级减去原坐标位置的灰度级进行反色
end
end
end
im2 = uint8(im2);
subplot(122);
imshow(im2);
title('输出图像');
       当然,其实也可以利用Matlab中的矩阵运算编写程序,这样程序可以更加精简,这里就不给出了。   

       myFase('实验2_lena.bmp'),运行结果如下:


图像对比度拉伸变换

  自定义一个图像的对比度拉伸函数,将输入图像的对比度拉伸到指定的灰度级区间,该函数的输入参数包括处理前的图像、期望灰度级区间的最小值和最大值(如指定区间为[50 200]),输出参数为处理后的图像。

Matlab代码如下:

function []=myContrConver(pho, mi, ma)
im1 = imread(pho);
subplot(121);
imshow(im1);
title('输入图像');
im1 = double(im1);
[r c m] = size(im1);
im2 = zeros(r,c,m);
%for i=1:m
%    for j=1:r
%        for k=1:c
%            im2(j,k,i)=min+(im1(j,k,i)-minR)/(maxR-minR)*(max-min);
%        end
%    end
%end
 
%先对原图像的 灰度级 进行归一化,再由归一化的区间缩放至所需区间
tempIma1=im1(:,:,1);
tempIma2=im1(:,:,2);
tempIma3=im1(:,:,3);
im2(:,:,1)=mi+(im1(:,:,1)-min(tempIma1(:)))/(max(tempIma1(:))-min(tempIma1(:)))*(ma-mi);
im2(:,:,2)=mi+(im1(:,:,2)-min(tempIma2(:)))/(max(tempIma2(:))-min(tempIma2(:)))*(ma-mi);
im2(:,:,3)=mi+(im1(:,:,3)-min(tempIma3(:)))/(max(tempIma3(:))-min(tempIma3(:)))*(ma-mi);
 
im2=uint8(im2);
subplot(122);
imshow(im2);
title('输出图像');


       myContrConver('实验2_lena.bmp'),运行结果如下:



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图像的灰度变换——图像旋转、图像的反色处理、对比度拉伸 的相关文章

  • Android 自定义CheckBox 样式

    转载自 xff1a http www open open com lib view open1392187282067 html 有些时候需要根据项目需求自定义CheckBox 的样式 xff0c 步骤如下 xff1a 1 首先在drawa
  • 定制个性化的 Android Checkbox 图标

    首发来自 http blog csdn net garretly 转载注明出处 先大概说一下 这里用到的技术比较简单没有多大的技术含量 关键是大家如何去理解 以及自我更新 好了 这里上代码 在 工程目录下 gt res gt drawabl
  • 解决ssl connect error问题

    curl版本过低 xff0c 升级curl php重新编译 xff0c 指定curl库解决
  • RadioGroup以及RadioButton自定义样式的使用

    转载自 xff1a RadioGroup以及RadioButton自定义样式的使用 RadioButton从字面上就可以很清楚的知道它是单选按钮 xff0c 它与RadioGroup配套时候 通常我们在开发中需要自定义RadioButton
  • 两种方式实现类似qq搜索的切换

    转载自 xff1a 点击打开链接 http www csdn net tag searchview qq的搜索功能在点击搜索框时整个页面上移 xff0c 出现透明布局 该效果是模仿iOS实现的 xff0c 但是在Android也是很容易实现
  • android---xml---include用法(导入另一个XML文件到本布局中)

    转载自 xff1a 点击打开链接 Android在xml文件中可使用include包含其他定义好的布局 xff0c 可以将多处用到的布局单独出来 xff0c 然后用include包含进来 xff0c 这种包含方法相当于把原来布局的一部分代码
  • Android开发技巧之像QQ一样输入文字和表情图像

    转载自 xff1a 点击打开链接 QQ聊天输入框 xff0c 在输入框中可以同时输入文字和表情图像 实际上 xff0c 这种效果在Android SDK中只需要几行代码就可以实现 本文将会介绍如何实现像QQ一样输入表情图像 EditText
  • Android调用相机并将照片存储到sd卡上

    转载自 xff1a 点击打开链接 Android中实现拍照有两种方法 xff0c 一种是调用系统自带的相机 xff0c 然后使用其返回的照片数据 还有一种是自己用Camera类和其他相关类实现相机功能 xff0c 这种方法定制度比较高 xf
  • Android学习长按列表项弹出菜单 给菜单项添加事件 获取上下文

    转载自 xff1a 点击打开链接 这里是先显示一个listview 长按listview的一个列表项 xff0c 弹出一个菜单来 xff0c 菜单有两个条目 xff0c 更新该条 和 删除该条 xff0c 并且这两条都有监听事件 xff0c
  • 通过MediaStore获取Audio信息

    转载自 xff1a 点击打开链接 Android系统提供了MediaScanner xff0c MediaProvider xff0c MediaStore等接口 xff0c 并且提供了一套数据库表格 xff0c 通过Content Pro
  • Android自定义搜索框(EditText)的搜索功能实现,过滤ListView

    实现自定义搜索框 xff08 实际上就是一个EditText xff09 xff1a lt RelativeLayout android id 61 34 64 43 id music search rl 34 android layout
  • Android自定义SwitchButton左右滑动开关按钮控件

    转载自 xff1a 点击打开链接 以前在项目中做过一个类似滑动开关的 但是可惜的是只能用点的方式去操作 总感觉不完美 在网上查阅资料后 稍稍的改进了一下 添加了滑动事件 封装了一个 SwitchButton 的类 分享给大家 希望对大家有用
  • Android开发使用MediaRecorder进行录音

    在说手机android开发如何使用MediaRecorder进行录音前 xff0c 我先来说一下如何在手机SD卡或手机内存上定义路径吧 xff08 优先存储在SD卡上 xff09 获取存放图片或录音文件的路径 xff08 手机内存上或内存卡
  • Visual Studio 2017/2015远程调试Linux程序(opencv)

    liu
  • Android分享软件功能的实现

    转载自 xff1a 点击打开链接 经常看到一些软件有一些共享的按钮 xff0c 点击这个按钮 xff0c 就会出现一大推你安装过软件列表 xff0c 比如 xff1a 微博 xff0c 短信 xff0c 蓝牙 xff0c 邮件等 其实实现非
  • Android检测网络是否正常

    转载自 xff1a 点击打开链接 按照惯例 xff0c 先上图后代码 在实际开发中 xff0c 尤其是在网络应用开发中 xff0c 时常要判断网络是否处在联网状态 xff0c 以及给用户友好的提示 xff0c 由于需要在每个界面中有需要对其
  • Android调用手机自带图库选择图片

    这里我们采用的布局文件中 有一个ImageView xff08 set pic xff09 和Button xff0c 布局较为简单 xff08 这里就不再给出 xff09 其中Button用于打开手机自带图库进行选择图片 xff0c 而I
  • Android自定义TextView字体

    我们可以使用Android中的Typeface使用ttf字体文件设置字体 首先 xff0c 我们先下载一个Android字体 xff0c 然后在工程项目下的assets文件下创建一个fonts文件 xff0c 在该文件下放置刚下好的字体 现
  • Android仿QQ中的“我的空间”做出ScrollView滑动修改标题栏颜色操作

    今天上午做了一个这样的效果 xff1a 移动滚动条时 xff0c 标题栏颜色发生变化 xff08 仿QQ中的 我的空间 那种效果 xff09 现在来说一下 xff0c 如何简单做出这种效果 xff08 可惜这里还未做出颜色渐变的效果 后来改
  • android关于EditText与其光标

    xff08 该文属整合性文章 xff09 android EditText插入字符串到光标所在位置 在安卓中处理文本编辑的时候 xff0c 我们一般都是用EditText控件 xff0c 除了基本的输入文字功能之外 xff0c 我们很可能还

随机推荐

  • Android中利用ViewHolder优化自定义Adapter的典型写法(讨论ViewHolder的修饰方式)

    转载自 xff1a 点击打开链接 利用ViewHolder优化自定义Adapter的典型写法 最近写Adapter写得多了 xff0c 慢慢就熟悉了 用ViewHolder xff0c 主要是进行一些性能优化 xff0c 减少一些不必要的重
  • Android TextView内容过长加省略号,点击显示全部内容

    在Android TextView中有个内容过长加省略号的属性 xff0c 即ellipsize xff0c 用法如下 xff1a 在xml中 xff1a android ellipsize 61 34 end 34 省略号在结尾 andr
  • Android Listview中显示不同的视图布局

    1 使用场景 在重写ListView的BaseAdapter时 xff0c 我们常常在getView 方法中复用convertView xff0c 以提高性能 convertView在 Item为单一的同种类型布局时 xff0c 能够回收并
  • Android的ListView中判断其内容已滚动到最顶部或者最底部

    Android 的ListView中 xff0c 如何判断其内容已滚动到最顶部或者最底部 xff1f 根据这个方法检测 xff1a getListView setOnScrollListener new OnScrollListener 6
  • Python爬虫淘宝基于selenium抓取淘宝商品数据2021年测试过滑动验证

    配置一下 34 可能需要修改的参数 34 xff0c 就可以食用底部代码了 ps 可能已失效 本文章代码功能准备工作Python用到的库和准备工作 可能需要修改的参数在CMD中打开一个Chrome浏览器并启用端口给Selenium调用导入模
  • 通过CSS名称取元素的方法

    总结了几种方法 xff0c 先放方法 xff0c 后面介绍区别 1 doucment getElementsByClassName 34 cssName 34 cssName为css的名称 2 1 document querySelecto
  • Android-Google自己的下拉刷新组件SwipeRefreshLayout

    感谢原文作者 xff1a http stormzhang github io android 2014 03 29 android swiperefreshlayout API doc xff1a http developer androi
  • SwipeRefreshLayout和ListView的EmptyView共存冲突的问题

    转载自 xff1a 点击打开链接 SwipeRefreshLayout是android官方的下拉刷新控件 xff1b 它内部有且只能有一个子控件 xff1b 当一个ListView嵌入到它内部时 xff0c 就不能为ListView带一个E
  • MySQL的触发器创建之注意事项(有关delimiter)

    今天晚上在自己的数据库上做了一个触发器 由于自己之前是使用SQL Server2005学习SQL语句的 xff0c 所以在这个简单的触发器设计出现了一些自己意想不到的BUG 现在我来简单的说一下 xff1a 这里使用到 diary表 com
  • 使用CSS将图片转换成黑白(灰色、置灰)

    转载请注明来自 张鑫旭 鑫空间 鑫生活 http www zhangxinxu com http www zhangxinxu com wordpress p 61 2547 可能早就知道 xff0c 像汶川这种糟糕的日子网站全灰在IE下是
  • CSS中常用的四种选择器

    Css中常用的四种选择器 1 类选择器 xff08 class 选择器 xff09 基本使用 xff1a 类选择器 属性名 属性值 案例 xff1a 类选择器 s1 background color pink font weight bol
  • Apache的下载安装(主要说的 64位)及问题

    今天重装完win10系统 xff0c 就重新下载安装 Apache 虽说之前有安装过Apache xff08 原来系统是win7 64位 xff09 xff0c 也成功运行过Apache服务器 xff0c 但是让我重新下载安装 xff0c
  • 使用PHP实现文件下载

    这里写了如何使用PHP实现文件下载的程序 xff0c 主要是为了方便自己查找 xff0c 也为了方便大家查阅学习 xff08 当然网上也有其他类似的代码 xff09 其中详细解析看原程序注释 PHP实现文件下载程序 xff1a FileDo
  • 向Web站点发送GET请求、POST请求,并从Web站点取得响应

    建议在查看以下代码之前 xff0c 先去了解有关HTTP请求和HTTP响应的相关知识 xff08 如请求与响应的内容 xff09 这里提供了一个发送GET POST请求的工具类 xff0c 源代码摘抄自 疯狂 Android讲义 xff08
  • 使用PHP进行图片的copy

    今天学习了PHP的文件编程 xff0c 其中PHP自身提供了复制文件的函数 xff08 copy xff09 自己也写了一个功能差不多的复制图片的函数 xff0c 以此在这里记录一下 在说该函数之前 xff0c 先介绍一下使用PHP创建 删
  • 使用PHP实现文件上传

    这里使用PHP实现文件的上传 xff0c 由在浏览器这边选择文件 xff0c 上传到服务器 其中 xff0c 在上传文件中 xff0c 考虑到对上传文件大小的限制 类型限制等问题 xff08 当然可以根据我们需要修改对上传的文件的限制 xf
  • 电子爱好者必备,强烈推荐这些常用工具

    工欲善其事 xff0c 必先利其器 xff01 要想 DIY xff0c 工具同样重要 xff01 下面按照工具的必须程度从 初学者 至 发烧友 逐级提出建议 xff0c 供大家参考 xff01 首先明确一点 xff1a 本配置是针对电子类
  • php中的绘图技术

    在php中 xff0c 使用php绘图 xff0c 在访问php文件时可以出现我们绘制的图像 php绘图技术可以应用于报表的开发 验证码的设计 在介绍php绘图技术之前 xff0c 我们首先需要了解一下php中的绘图坐标系 xff1a ph
  • jpgraph绘图库的安装与配置

    以前用 PHP作图时必须要掌握复杂抽象的画图函数 xff0c 或者借助一些网上下载的画 柱形图 饼形图的类来实现 没有一个统一的chart类来实现图表的快速开发 现在我们有了一个新的选择 xff1a JpGraph 专门提供图表的类库 它使
  • 图像的灰度变换——图像旋转、图像的反色处理、对比度拉伸

    这次我们要处理的是对图像 进行旋转 操作 xff0c 具体要求 xff0c 如下 xff1a 自定义一个图像的仿射变换函数 xff0c 用于旋转给定的输入图像 xff0c 该函数的输入参数包括处理前的图像和旋转角度 输入的角度为正数 xff