图片算法题
① 数字图像处理的基本算法及要解决的主要问题
图像处理,是对图像进行分析、加工、和处理,使其满足视觉、心理以及其他要求的技术。图像处理是信号处理在图像域上的一个应用。目前大多数的图像是以数字形式存储,因而图像处理很多情况下指数字图像处理。此外,基于光学理论的处理方法依然占有重要的地位。
图像处理是信号处理的子类,另外与计算机科学、人工智能等领域也有密切的关系。
传统的一维信号处理的方法和概念很多仍然可以直接应用在图像处理上,比如降噪、量化等。然而,图像属于二维信号,和一维信号相比,它有自己特殊的一面,处理的方式和角度也有所不同。
目录
[隐藏]
* 1 解决方案
* 2 常用的信号处理技术
o 2.1 从一维信号处理扩展来的技术和概念
o 2.2 专用于二维(或更高维)的技术和概念
* 3 典型问题
* 4 应用
* 5 相关相近领域
* 6 参见
[编辑] 解决方案
几十年前,图像处理大多数由光学设备在模拟模式下进行。由于这些光学方法本身所具有的并行特性,至今他们仍然在很多应用领域占有核心地位,例如 全息摄影。但是由于计算机速度的大幅度提高,这些技术正在迅速的被数字图像处理方法所替代。
从通常意义上讲,数字图像处理技术更加普适、可靠和准确。比起模拟方法,它们也更容易实现。专用的硬件被用于数字图像处理,例如,基于流水线的计算机体系结构在这方面取得了巨大的商业成功。今天,硬件解决方案被广泛的用于视频处理系统,但商业化的图像处理任务基本上仍以软件形式实现,运行在通用个人电脑上。
[编辑] 常用的信号处理技术
大多数用于一维信号处理的概念都有其在二维图像信号领域的延伸,它们中的一部分在二维情形下变得十分复杂。同时图像处理也具有自身一些新的概念,例如,连通性、旋转不变性,等等。这些概念仅对二维或更高维的情况下才有非平凡的意义。
图像处理中常用到快速傅立叶变换,因为它可以减小数据处理量和处理时间。
[编辑] 从一维信号处理扩展来的技术和概念
* 分辨率(Image resolution|Resolution)
* 动态范围(Dynamic range)
* 带宽(Bandwidth)
* 滤波器设计(Filter (signal processing)|Filtering)
* 微分算子(Differential operators)
* 边缘检测(Edge detection)
* Domain molation
* 降噪(Noise rection)
[编辑] 专用于二维(或更高维)的技术和概念
* 连通性(Connectedness|Connectivity)
* 旋转不变性(Rotational invariance)
[编辑] 典型问题
* 几何变换(geometric transformations):包括放大、缩小、旋转等。
* 颜色处理(color):颜色空间的转化、亮度以及对比度的调节、颜色修正等。
* 图像合成(image composite):多个图像的加、减、组合、拼接。
* 降噪(image denoising):研究各种针对二维图像的去噪滤波器或者信号处理技术。
* 边缘检测(edge detection):进行边缘或者其他局部特征提取。
* 分割(image segmentation):依据不同标准,把二维图像分割成不同区域。
* 图像制作(image editing):和计算机图形学有一定交叉。
* 图像配准(image registration):比较或集成不同条件下获取的图像。
* 图像增强(image enhancement):
* 图像数字水印(image watermarking):研究图像域的数据隐藏、加密、或认证。
* 图像压缩(image compression):研究图像压缩。
[编辑] 应用
* 摄影及印刷 (Photography and printing)
* 卫星图像处理 (Satellite image processing)
* 医学图像处理 (Medical image processing)
* 面孔识别, 特征识别 (Face detection, feature detection, face identification)
* 显微图像处理 (Microscope image processing)
* 汽车障碍识别 (Car barrier detection)
[编辑] 相关相近领域
* 分类(Classification)
* 特征提取(Feature extraction)
* 模式识别(Pattern recognition)
* 投影(Projection)
* 多尺度信号分析(Multi-scale signal analysis)
* 离散余弦变换(The Discrete Cosine Transform)
② android 面试,算法题。
final int size = data.length;
for(int i = 0; i< size; i++){
if(data[i] == 0xffffffff)
data[i] = 0x80ffffff;
}
不知道你是不是这个意思。
③ 图遍历算法之最短路径Dijkstra算法
最短路径问题是图论研究中一个经典算法问题,旨在寻找图中两节点或单个节点到其他节点之间的最短路径。根据问题的不同,算法的具体形式包括:
常用的最短路径算法包括:Dijkstra算法,A 算法,Bellman-Ford算法,SPFA算法(Bellman-Ford算法的改进版本),Floyd-Warshall算法,Johnson算法以及Bi-direction BFS算法。本文将重点介绍Dijkstra算法的原理以及实现。
Dijkstra算法,翻译作戴克斯特拉算法或迪杰斯特拉算法,于1956年由荷兰计算机科学家艾兹赫尔.戴克斯特拉提出,用于解决赋权有向图的 单源最短路径问题 。所谓单源最短路径问题是指确定起点,寻找该节点到图中任意节点的最短路径,算法可用于寻找两个城市中的最短路径或是解决着名的旅行商问题。
问题描述 :在无向图 中, 为图节点的集合, 为节点之间连线边的集合。假设每条边 的权重为 ,找到由顶点 到其余各个节点的最短路径(单源最短路径)。
为带权无向图,图中顶点 分为两组,第一组为已求出最短路径的顶点集合(用 表示)。初始时 只有源点,当求得一条最短路径时,便将新增顶点添加进 ,直到所有顶点加入 中,算法结束。第二组为未确定最短路径顶点集合(用 表示),随着 中顶点增加, 中顶点逐渐减少。
以下图为例,对Dijkstra算法的工作流程进行演示(以顶点 为起点):
注:
01) 是已计算出最短路径的顶点集合;
02) 是未计算出最短路径的顶点集合;
03) 表示顶点 到顶点 的最短距离为3
第1步 :选取顶点 添加进
第2步 :选取顶点 添加进 ,更新 中顶点最短距离
第3步 :选取顶点 添加进 ,更新 中顶点最短距离
第4步 :选取顶点 添加进 ,更新 中顶点最短距离
第5步 :选取顶点 添加进 ,更新 中顶点最短距离
第6步 :选取顶点 添加进 ,更新 中顶点最短距离
第7步 :选取顶点 添加进 ,更新 中顶点最短距离
示例:node编号1-7分别代表A,B,C,D,E,F,G
(s.paths <- shortest.paths(g, algorithm = "dijkstra"))输出结果:
(s.paths <- shortest.paths(g,4, algorithm = "dijkstra"))输出结果:
示例:
找到D(4)到G(7)的最短路径:
[1] 维基网络,最短路径问题: https://zh.wikipedia.org/wiki/%E6%9C%80%E7%9F%AD%E8%B7%AF%E9%97%AE%E9%A2%98 ;
[2]CSDN,Dijkstra算法原理: https://blog.csdn.net/yalishadaa/article/details/55827681 ;
[3]RDocumentation: https://www.rdocumentation.org/packages/RNeo4j/versions/1.6.4/topics/dijkstra ;
[4]RDocumentation: https://www.rdocumentation.org/packages/igraph/versions/0.1.1/topics/shortest.paths ;
[5]Pypi: https://pypi.org/project/Dijkstar/
④ 算法设计与分析 猜图片(用分治法求解):给选手出示42张图片,每行6张,共7行。选手可以给大家做一些是非
可以用二分法,递归折半,,先分两对半,判断左右,若在左就右边放弃,处理左边,同样分两半,判断,循环,直到找出正确的图,如果要问次数的话,再循环里,加一个计数器,
⑤ MATLAB微分方程图像的问题 df/dp=p*f^2 求f与p函数图像的算法,以及df/dp与p函数图像的算法 急求,救急!
求解微分方程需要指定初始条件,这里以 f(0) = 0.1 为例。
解微分方程:
>>f=dsolve('Df=p*f^2','f(0)=0.1','p')
f=
-2/(p^2-20)
画f对p的函数图像:
ezplot(f,[010])
⑥ 两道编程算法题(两图一道),题目如下,可以给出算法思路或者源代码,源代码最好是C语言的
就会个第一题(因为第一题上已经给出了大致思路)
思路:用map容器(它的内部数据结构是一颗红黑树,查找和插入数据速度非常快)
map<int,st>a;//key(int):设置为1~n的数;value(st):设置为key的前驱和后继;
这样一来就可以像链表快速插入数据,又可以像数组随机访问元素(key,就相当于数组的下标)
下面是代码和运行截图;
看代码前建议先了解一下map容器的具体用法;
#include<iostream>
#include<map>
#include<vector>
using namespace std;
struct st{//两个成员变量用来储存前驱和后继
int left;//0
int right;//1
st()
{
left=0;
right=0;
}
};
void input(map<int,st> &a)//输出
{
st t;
int s=0;
map<int,st>::iterator it;//迭代器(指针)
for(it=a.begin();it!=a.end();it++)//循环迭代
{
t=it->second;
if(t.left==0)//左边等于0,说明该数是第一个数
{
s=it->first;//记录key
break;
}
}
t=a[s];
cout<<s<<" ";
while(t.right!=0)//循环找当前数的右边的数(右边的为0,就说明该数是最后一个数)
{
cout<<t.right<<" ";
t=a[t.right];
}
}
int main()
{
st t,t_i,t_x,t_k,s;
map<int,st>a;
map<int,st>::iterator it;
int n,x,p,x_l,x_r;
cin>>n;
for(int i=1;i<=n;i++)//map容器赋初值(i,t)
//i:(key)下标;t:(value)结构体变量
{
a.insert(make_pair(i,t));
}
for(int i=2;i<=n;i++)
{
cin>>x>>p;
if(p==0)//x的左边插入i
{
t=a[x];
if(t.left==0)//x的左边没有数
{
t_x.left=i;
t_i.right=x;
a[x]=t_x;
a[i]=t_i;
}
else//x的左边有数
{
int x_left;
t_x=a[x];
x_left=t_x.left;
t_k=a[x_left];
t_i.right=x;
t_i.left=t_x.left;
t_k.right=i;
t_x.left=i;
a[x]=t_x;
a[i]=t_i;
a[x_left]=t_k;
}
}
else//x的右边插入i
{
t=a[x];
if(t.right==0)//x的右边没有数
{
t_x.right=i;
t_i.left=x;
a[x]=t_x;
a[i]=t_i;
}
else//x的左边有数
{
int x_right;
t_x=a[x];
x_right=t_x.right;
t_k=a[x_right];
t_i.left=x;
t_i.right=t_x.right;
t_k.left=i;
t_x.right=i;
a[x]=t_x;
a[i]=t_i;
a[x_right]=t_k;
}
}
}
for(it=a.begin();it!=a.end();it++)//循环迭代打印各个数之间的关系
{
cout<<it->first<<" ";
cout<<"左边:";
cout<<it->second.left<<" ";
cout<<"右边:";
cout<<it->second.right<<endl;
}
input(a);//打印序列
return 0;
}
/*
4
1 0
2 1
1 0
2 3 4 1
*/
⑦ 图像比对的原理或者算法
有噪声情况下。1、配准;2、两张图的图像块分别计算特征(lbp,sift等);3、计算特征的距离(欧式距离等)。在matlab或opencv下都可以。