技术标签: matlab
因为最近在学习matlab的app designer以及图像的一些处理,因为网上对appdesigner的相关成品代码有点少,所以我就自己写了点代码来巩固自己的知识,代码可能有些复杂凌乱,因为刚写没多久。希望所写的对大家的学习能够有所帮助,大家一定要去网上去搜相关的原理再去看代码;
大体的模板形式如下:
其中主要的功能有模糊度,锐化,相对亮度,对比度,镜像旋转,水平可调角度旋转,按键返回上一步,按键保存改变的图片,按键显示新的图片,按键打开图片并在文本框里显示路径;其中改app有个缺点,就是无法像手机里相册那样调整了之后还可以还原之前的好几步,这个只能返回一步,如果有朋友能有想法去处理这个问题,希望朋友们能将想法发在评论区,共同进步。
首先简单的部分如背景颜色,标题将不再讲解,下面主要是讲一下各个控件的代码与功能,如有不对的地方,希望大家可以指出批评;
首先先建好模板,全局变量(全局变量有很大的作用无法忽视,original的作用是保存原图片,changed与upgrade的作用是保存改编的图片,last是用来保存上一步的图片):
open控件的功能是打开图片并显示在origina坐标区中,其代码如下:
模糊度控件的功能是添加动态的模糊(是matlab自带的函数),其代码如下:
锐化控件的功能是锐化图片,锐化是提取边缘特征,然后和原图片按比例进行重叠,其代码如下:
相对亮度控件的功能是提高亮度或降低亮度,代码如下:
对比度控件的功能就是改变对比度(对比度的原理就是亮暗的对比强度更大),其代码如下:
水平可调角度旋转的控件功能是将图片水平旋转,其代码如下:
镜面旋转控件的功能是将图片进行水平旋转与垂直旋转,其代码如下:
重置控件的功能是重新显示最开始图片,免去了打开去挑选图片步骤,用在修改图片无法满足要求时可以使用,其代码如下:
保存控件的功能时将app.UIAXES_2控件中显示的图片保存下来,其中有很多方法,我用的是拷贝窗口的方式,其代码如下:
返回上一步控件的功能是将返回上一步仅仅能返回一步,这是局限性最大的地方,希望大家可以一块想想解决方案,其代码如下:
所有控件的代码都在下方,如需文件的可私信;
properties (Access = private)
originalpicture; % Description
upgradepicture;
changedpicture;
lastpicture;
end
% Callbacks that handle component events
methods (Access = private)
% Code that executes after component creation
function startupFcn(app)
app.Lamp.Color='r';
end
% Button pushed function: openButton
function openButtonPushed(app, event)
[filename,pathname]=uigetfile('*.jpg',"search picture");
if isequal(pathname,'')||isequal(filename,'')
msgbox("no picture",'warning','help');
return;
else
app.Lamp.Color='g';
path=strcat(pathname,filename);
app.pathEditField.Value=path;
app.originalpicture=imread(path);
app.originalpicture=rgb2gray(app.originalpicture);
imshow(app.originalpicture,'Parent',app.UIAxes);
app.changedpicture=app.originalpicture;
end
end
% Value changing function: Slider
function SliderValueChanging(app, event)
changingValue = event.Value;
changingValue=double(changingValue);
if isequal(app.originalpicture,'')
msgbox("无图片",'warning','help');
return;
elseif isequal(app.changedpicture,'')
app.lastpicture=app.upgradepicture;
obscureway1=fspecial('motion',changingValue,changingValue);
obscureway1=imfilter(app.originalpicture,obscureway1);
app.upgradepicture=obscureway1;
imshow(obscureway1,'Parent',app.UIAxes_2);
app.changedpicture=app.upgradepicture;
return;
else
app.lastpicture=app.upgradepicture;
obscureway1=fspecial('motion',changingValue,changingValue);
obscureway1=imfilter(app.changedpicture,obscureway1);
app.upgradepicture=obscureway1;
imshow(obscureway1,'Parent',app.UIAxes_2);
app.changedpicture=app.upgradepicture;
end
end
% Value changing function: Slider_2
function Slider_2ValueChanging(app, event)
changingValue = event.Value;
changingValue=double(changingValue);
changingValue1=changingValue./100;
if isequal(app.originalpicture,'')
msgbox("无图片",'warning','help');
return;
elseif isequal(app.changedpicture,'')
app.lastpicture=app.changedpicture;
test = double(app.originalpicture);
Gx = [-1 -2 -1;0 0 0;1 2 1];
x = filter2(Gx,test);
Gy = [-1 0 1;-2 0 2;-1 0 1];
y = filter2(Gy,test);
test1 = sqrt(x.^2 + y.^2);
test2 = test + test1*changingValue1;
imshow(uint8(test2),'Parent',app.UIAxes_2);
app.changedpicture=uint8(tset2);
return;
else
app.lastpicture=app.changedpicture;
test = double(app.changedpicture);
Gx = [-1 -2 -1;0 0 0;1 2 1];
x = filter2(Gx,test);
Gy = [-1 0 1;-2 0 2;-1 0 1];
y = filter2(Gy,test);
test1 = sqrt(x.^2 + y.^2);
test2 = test + test1*changingValue1;
imshow(uint8(test2),'Parent',app.UIAxes_2);
app.changedpicture=uint8(tset2);
return;
end
end
% Value changed function: Spinner
function SpinnerValueChanged(app, event)
value = app.Spinner.Value;
if(value>100)
app.Spinner.Value=0;
value=0;
msgbox('超出范围','warning','help');
end
if isequal(app.originalpicture,'')
msgbox("无图片","warning",'help');
return;
elseif isequal(app.changedpicture,'')
app.lastpicture=app.changedpicture;
brightpicture=imadd(app.originalpicture,value);
imshow(brightpicture,'Parent',app.UIAxes_2);
app.changedpicture=brightpicture;
else
app.lastpicture=app.changedpicture;
brightpicture=imadd(app.changedpicture,value);
imshow(brightpicture,'Parent',app.UIAxes_2);
app.changedpicture=brightpicture;
end
end
% Value changing function: Spinner_2
function Spinner_2ValueChanging(app, event)
changingValue = event.Value;
changingValue=double(changingValue);
changingValue=changingValue./100;
if(changingValue>=0.5||changingValue<0)
app.Spinner_2.Value=0;
changingValue=0;
msgbox('超出范围','warning','help');
end
if isequal(app.originalpicture,'')
msgbox("无图片","warning",'help');
return;
elseif isequal(app.changedpicture,'')
app.lastpicture=app.changedpicture;
contrastpicture=imadjust(app.originalpicture,[changingValue,1-changingValue],[]);
imshow(contrastpicture,'Parent',app.UIAxes_2);
app.changedpicture=contrastpicture;
return;
else
app.lastpicture=app.changedpicture;
contrastpicture=imadjust(app.changedpicture,[changingValue,1-changingValue],[]);
imshow(contrastpicture,'Parent',app.UIAxes_2);
app.changedpicture=contrastpicture;
return;
end
end
% Button pushed function: saveButton
function saveButtonPushed(app, event)
savepicture=figure('Visible','off');
copyobj(app.UIAxes_2,savepicture);
set(gca,'Units','normalized','Position',[0.2 0.2 0.8 0.8]);
saveas(savepicture,'nb.jpg');
end
% Button pushed function: newButton
function newButtonPushed(app, event)
if isequal(app.originalpicture,'')
msgbox("无图片",'warning','help');
else
imshow(app.originalpicture,'Parent',app.UIAxes_2);
end
end
% Button pushed function: lastactionButton
function lastactionButtonPushed(app, event)
if isequal(app.lastpicture,'')
msgbox('无上一步','warning','help');
else
imshow(app.lastpicture,'Parent',app.UIAxes_2);
end
end
% Value changed function: mirrorKnob
function mirrorKnobValueChanged(app, event)
value = app.mirrorKnob.Value;
app.lastpicture=app.changedpicture;
if isequal(value,'x镜面')
mirrorpicture=flip(app.changedpicture,1);
imshow(mirrorpicture,'Parent',app.UIAxes_2);
app.changedpicture=mirrorpicture;
elseif isequal(value,'y镜面')
mirrorpicture=flip(app.changedpicture,2);
imshow(mirrorpicture,'Parent',app.UIAxes_2);
app.changedpicture=mirrorpicture;
end
end
% Value changing function: levelangleKnob
function levelangleKnobValueChanging(app, event)
changingValue = event.Value;
changingValue=double(changingValue);
app.lastpicture=app.changedpicture;
anglepicture=imrotate(app.changedpicture,changingValue);
imshow(anglepicture,'Parent',app.UIAxes_2);
app.changedpicture=anglepicture;
end
end
文章浏览阅读748次。总结起来大概有5种做法:将要处理的文字写到一个资源文件,如string.xml(使用html用法格式化)当文字中出现URL、E-mail、电话号码等的时候,可以将TextView的android:autoLink属性设置为相应的的值,如果是所有的类型都出来就是**android:autoLink="all",当然也可以在java代码里 做,textView01.setAutoLinkMask(Li..._qaction::settext 无法添加下划线
文章浏览阅读6.3k次,点赞2次,收藏10次。摘要: 背景 随着近几年物联网的发展,时序数据迎来了一个不小的爆发。从DB-Engines上近两年的数据库类型增长趋势来看,时序数据库的增长是非常迅猛的。在去年我花了比较长的时间去了解了一些开源时序数据库,写了一个系列的文章(综述、HBase系、Cassandra系、InfluxDB、Prometheus),感兴趣的可以浏览。背景随着近几年物联网的发展,时序数据迎来了一个不小的爆发。从DB..._tablestore 时间类型处理
文章浏览阅读5.7k次,点赞8次,收藏49次。可以编译成功但是运行时段错误查找原因应该是ROS noetic版本中自带的OpenCV4和VINS-mono中需要使用的OpenCV3冲突的问题。为了便于查找问题,我只先编译feature_tracker包。解决思路历程:o想着把OpenCV4相关的库移除掉,但是发现编译feature_tracker的时候仍然会关联到Opencv4的库,查找原因是因为cv_bridge是依赖opencv4的,这样导致同时使用了opencv3和opencv4,因此运行出现段错误。oo进一步想着(1)把vins-mon_uabntu20.04安装vins-mono
文章浏览阅读3.6k次,点赞3次,收藏12次。创龙TL6748开发板中,EMIFA模块使用默认的PLL0_SYSCLK3时钟,使用AISgen for D800K008工具加载C6748配置文件C6748AISgen_456M_config(Configuration files,在TL_TMS6748/images文件夹下),由图可以看到DIV3等于4,注意这里的DIV3就是实际的分频值(x),而不是写入相应PLL寄存器的值(x-1)。_tms 6748
文章浏览阅读5.9k次,点赞4次,收藏13次。转载请说明出处:eigen稀疏矩阵拼接(块操作)eigen稀疏矩阵拼接(块操作)关于稀疏矩阵的块操作:参考官方链接 However, for performance reasons, writing to a sub-sparse-matrix is much more limited, and currently only contiguous sets of columns..._稀疏矩阵拼接
文章浏览阅读946次,点赞19次,收藏19次。波束形成是天线阵列信号处理中的一项关键技术,它通过对来自不同方向的信号进行加权求和,来增强特定方向的信号并抑制其他方向的干扰。本文介绍了两种基于 Capon 和信号子空间的变形算法,即最小方差无失真响应 (MVDR) 算法和最小范数算法,用于实现波束形成。这些算法通过优化波束形成权重向量,来最小化波束形成输出的方差或范数,从而提高波束形成性能。引言波束形成在雷达、声纳、通信和医学成像等众多应用中至关重要。它可以增强目标信号,抑制干扰和噪声,提高系统性能。
文章浏览阅读3.4w次。转自:http://www.linuxidc.com/Linux/2017-07/145335.htm使用Ubuntu开发已经有些时间了。写下这篇文章,希望记录下这一年的小小总结。使用Linux开发有很多坑,同时也有很多有趣的东西,可以编写一些自动化脚本,添加定时器,例如下班定时关机等自动化脚本,同时对于服务器不太了解的朋友,建议也可以拿台Linux来实践下,同时Ubuntu在Androi_ubuntu开发推荐软件
文章浏览阅读2.2k次。一,问题 nginx反向代理后,在应用中取得的ip都是反向代理服务器的ip,取得的域名也是反向代理配置的url的域名,解决该问题,需要在nginx反向代理配置中添加一些配置信息,目的将客户端的真实ip和域名传递到应用程序中。二,解决 Nginx服务器增加转发配置 proxy_set_header Host $host;_nginx获取到的是交换机的ip
文章浏览阅读1.4k次。Wireshark TCP数据包跟踪 还原图片 WinHex简单应用 _wireshark抓包还原图片
文章浏览阅读1.5k次。Win8下安装VS2012时,蓝屏,报错WHEA_UNCORRECTABLE_ERROR(P.S.新的BSOD挺有创意":("),Google之,发现[via]需要BIOS中禁用Intel C-State,有严重Bug的嫌疑哦原因有空再看看..._win8.1 whea_uncorrectable_error蓝屏代码
文章浏览阅读919次,点赞21次,收藏22次。科大讯飞是一家专业从事智能语音及语音技术研究、软件及芯片产品开发、语音信息服务的软件企业,语音技术实现了人机语音交互,使人与机器之间沟通变得像人与人沟通一样简单。语音技术主要包括语音合成和语音识别两项关键技术。此外,语音技术还包括语音编码、音色转换、口语评测、语音消噪和增强等技术,有着广阔的应用。_科大讯飞培训案例
文章浏览阅读4.7k次。Perl是一个高阶程式语言,由 Larry Wall和其他许多人所写,融合了许多语言的特性。它主要是由无所不在的 C语言,其次由 sed、awk,UNIX shell 和至少十数种其他的工具和语言所演化而来。Perl对 process、档案,和文字有很强的处理、变换能力,ActivePerl是一个perl脚本解释器。其包含了包括有 Perl for Win32、Perl for ISAPI、PerlScript、Perl。_perl下载