2012-07-20 20:12:26 canhui2009 阅读数 488
  • springmvc深入浅出(备java基础,javaee课程,struts...

    Spring web mvc架构、springmvc入门程序、非注解处理器映射器和适配器、注解开发处理器映射器和适配器、springmvc整合Mybatis、RequestMapping、Controller方法返回值、springmvc与struts2区别、springmvc上传图片、json数据交互、Validation、异常处理器、拦截器。

    12518 人正在学习 去看看 任亮

精通Visual C++图像编程       学习记录:

框架将消息和它们的处理函数连接起来就是消息映射。消息映射使应用程序在接收到消息时调用对应的消息处理函数来响应和处理消息。

消息映射开始于BEGIN_MESSAGE_MAP宏,结束于END_MESSAGE_MAP宏,中间由一系列预定义的被称为条目宏的宏组成,其基本格式如下:

BEGIN_MESSAGE_MAP(calssname, parentclassname)

//{{AFX_MSG_MAP(classname)

条目宏1

条目宏2

……//}}AFX_MSG_MAP

END_MESSAGE_MAP()

其中,classname为拥有消息映射的当前类名,parentclassname为当前类的父类名,条目宏定义了类所处理的消息及与其对应的函数,常用的条目宏的类型如表:

消息类型                                               宏格式                                                                          说明

Windows消息                                  ON_WM_XXXX                                                          WM_XXXX为Windows消息名

命令                                                 ON_COMMAND(ID, Function)                                   ID为命令标识号,Function为处理函数名

更新命令                                         ON_UPDATE_COMMAND_UI(ID, Function)             ID为名利标识号,Function为处理函数名

控制通知                                         ON_XXXX(ID, Function)                                             ID为控制标识符,Function为处理函数名

用户定义消息                                 ON_MESSAGE(ID, Function)                                     ID为控制标识符,Function为处理函数名

用户注册消息                                 ON_REGISTERED_MESSAGE(ID, Function)           ID为控制标识符,Function为处理函数名

注意:MFC要求所有消息处理函数声明为afx_msg类型。

用户定义和注册的消息、命令和控制通知都没有缺省的处理函数,需要在定义时声明,一般建议根据其ID名称来为函数命名。


用Visual C++ 进行Win32可视化编程的基本流程如下:

(1)生成框架:运行AppWizard,并按需要指定生成应用程序的选项,指定框架中视类的基类(CView、CEditView、CFormView、CScrollView、CTreeView等)。AppWizard将按指定的选项生成应用程序框架和相关的文件,包括包含项目(project)的工作空间(workspace)文件和源文件,主要是应用程序(application)、文档(document)、视(view)和主框窗口(main frame)的C++代码文件(*.cpp,*.h),以及缺省包含标准界面接口的资源文件(*.rc)。

(2)设计用户界面:利用Visual C++资源编辑器可视化地直观编辑资源文件,定制菜单、对话框、工具条、字符串、加速键、位图、图标、光标等接口资源。

(3)连接界面和代码:利用ClassWizard把资源文件中定义的界面资源标识(如菜单项、工具条和对话框中的控制等)在指定的源文件中映射成相应的函数模板。

(4)编写、修改函数代码:利用ClassWizard可以方便地在源码编辑器(source code editor)中跳转到指定的函数代码处。

(5)根据需要创建新类和编写代码:用ClassWizard创建新类,并生成相应的源文件。如新类是对话框类,可先用资源编辑器生成对话框模板,然后用ClassWizard创建对话框类代码,并与模板连接,编写新类相关的源代码。

(6)实现文档类:在APPWizard生成的框架基础上设计文档数据的数据结构,在文档类中增加相应的成员数据、成员函数,实现对数据的操作和文档与数据的接口。

(7)实现框架中标准的文件操作命令,即Open,Save和Save As 命令:框架已完成标准的文件操作命令的所有接口,程序员要做的仅仅是编写文档类串行化(Serialize())成员函数。

(8)实现视类:框架已构造号了文档与视的关系,视能方便地访问文档中的pubic数据成员。可根据文档的需要构造一个或多个视类,通过ClassWizard把视的用户接口资源映射成函数模板,并编写函数代码。

(9)如需要,增加分割窗口(splitter window):在SDI的主框窗口类或MDI的子窗口类中添加一个CSplitterWnd对象,碧昂在窗口类的ONCreateClient成员函数中对CSplitterWnd对象进行创建和初始化。如果用户分割了一个窗口,框架将给文档创建并增加附加的视对象。

(10)建立、调试、修改应用程序。如有问题,可根据需要重复步骤2~10。

(11)测试应用程序。如有问题,可根据需要重复步骤2~11。

(12)结束。



2018-04-23 22:29:20 qq_41911678 阅读数 13
  • springmvc深入浅出(备java基础,javaee课程,struts...

    Spring web mvc架构、springmvc入门程序、非注解处理器映射器和适配器、注解开发处理器映射器和适配器、springmvc整合Mybatis、RequestMapping、Controller方法返回值、springmvc与struts2区别、springmvc上传图片、json数据交互、Validation、异常处理器、拦截器。

    12518 人正在学习 去看看 任亮

imread();
imshow();
imtool();

imadjust();调整图像灰度;连接
    【以下为摘取:imadjust在数字图像处理中用于进行图像的灰度变换(调节灰度图像的亮度或彩色图像的颜色矩阵)。

        J = imadjust(I)将灰度图像 I 中的亮度值映射到 J 中的新值并使 1% 的数据是在低高强度和饱和,这增加了输出图像 J 的对比度值。此用法相当于 imadjust(I,stretchlim(I))

J = imadjust(I,[low_in; high_in],[low_out; high_out])

将图像I中的亮度值映射到J中的新值,即将low_in至high_in之间的值映射到low_out至high_out之间的值。low_in 以下与 high_in 以上的值被剪切掉了,也就是说,low_in 以下的值映射到 low_out,high_in 以上的值映射到high_out。它们都可以使用空的矩阵[],默认值是[0 1]

J = imadjust(I,[low_in; high_in],[low_out; high_out],gamma)

将图像 I 中的亮度值映射到 J 中的新值,其中 gamma指定描述值I和值J关系的曲线形状。如果gamma小于1,此映射偏重更高数值(明亮)输出,如果gamma大于1,此映射偏重更低数值(灰暗)输出,如果省略此参数,默认为(线性映射)。 

newmap = imadjust(map,[low_in; high_in],[low_out; high_out],gamma)

调整索引色图像的调色板map。如果low_in, high_in, low_out, high_out 和 gamma 都是标量,那么对 r,g,b 分量同时都做此映射。对于每个颜色分量都有唯一的映射,当 low_in 和 high_in 同时为1*3向量或者 low_out 和 high_out 同时为1*3向量或者 gamma 为1*3向量时。调整后的颜色矩阵 newmap 和 map 有相同的大小。

RGB2 = imadjust(RGB1,...)

对 RGB 图像 RGB1 的红、绿、蓝调色板分别进行调整。随着颜色矩阵的调整,每一个调色板都有唯一的映射值。


2018-02-26 21:57:11 hwtkao150 阅读数 802
  • springmvc深入浅出(备java基础,javaee课程,struts...

    Spring web mvc架构、springmvc入门程序、非注解处理器映射器和适配器、注解开发处理器映射器和适配器、springmvc整合Mybatis、RequestMapping、Controller方法返回值、springmvc与struts2区别、springmvc上传图片、json数据交互、Validation、异常处理器、拦截器。

    12518 人正在学习 去看看 任亮

卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。

卷积神经网络CNN的结构一般包含这几个层:

  • 输入层:用于数据的输入
  • 卷积层:使用卷积核进行特征提取和特征映射
  • 激励层:由于卷积也是一种线性运算,因此需要增加非线性映射
  • 池化层:进行下采样,对特征图稀疏处理,减少数据运算量。
  • 全连接层:通常在CNN的尾部进行重新拟合,减少特征信息的损失
  • 输出层:用于输出结果

卷积神经网络结构如下:


我们使用两种方法来实现卷积神经网络:

方法一:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.examples.tutorials.mnist import input_data

tf.set_random_seed(1)
np.random.seed(1)
LR = 0.001
batch_size=50

mnist = input_data.read_data_sets('./mnist',one_hot=True)
test_x = mnist.test.images[:2000]
test_y = mnist.test.labels[:2000]

x = tf.placeholder(tf.float32,[None,784])
img = tf.reshape(x,[-1,28,28,1])
y = tf.placeholder(tf.int32,[None,10])

def add_cnn_layer(inputs,filters,strides,Activation_function=None):
    x = tf.nn.conv2d(inputs,filters,[1,strides,strides,1],padding='SAME')
    if Activation_function is None:
        out = x
    else:
        out = Activation_function(x)
    return out

def add_maxpooling_layer(inputs,k):
    out = tf.nn.max_pool(inputs,ksize=[1,k,k,1],strides=[1,k,k,1],padding='SAME')
    return out

# bulid cnn net
w1 = tf.Variable(tf.random_normal([5,5,1,16]))
w2 = tf.Variable(tf.random_normal([5,5,16,32]))

conv1 = add_cnn_layer(img,w1,1,tf.nn.relu)
pool1 = add_maxpooling_layer(conv1,2)
conv2 = add_cnn_layer(pool1,w2,1,tf.nn.relu)
pool2 = add_maxpooling_layer(conv2,2)
flat = tf.reshape(pool2,[-1,7*7*32])
output = tf.layers.dense(flat,10)

loss = tf.losses.softmax_cross_entropy(onehot_labels = y,logits = output)
train = tf.train.AdamOptimizer(LR).minimize(loss)
accuracy = tf.metrics.accuracy(labels=tf.argmax(y,axis=1),predictions=tf.argmax(output,axis=1),)[1]

sess = tf.Session()
sess.run(tf.global_variables_initializer())
sess.run(tf.local_variables_initializer())

for step in range(5000):
    b_x,b_y = mnist.train.next_batch(batch_size)
    _,loss_ = sess.run([train,loss],feed_dict={x:b_x,y:b_y})
    if step%50==0:
        accuracy_ = sess.run(accuracy,feed_dict={x:test_x,y:test_y})
        print('train loss:%.4f'%loss_, '|test accuracy%.4f'%accuracy_)
   

方法二:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.examples.tutorials.mnist import input_data

tf.set_random_seed(1)
np.random.seed(1)
LR = 0.001
batch_size=50

mnist = input_data.read_data_sets('./mnist',one_hot=True)
test_x = mnist.test.images[:2000]
test_y = mnist.test.labels[:2000]

x = tf.placeholder(tf.float32,[None,784])
img = tf.reshape(x,[-1,28,28,1])
y = tf.placeholder(tf.int32,[None,10])

def add_cnn_layer(input,filter,k,stride,Activation_function=None):
    x = tf.layers.conv2d(
                         inputs = input,
                         filters = filter,
                         kernel_size = k,
                         strides = stride,
                         padding ='same',
                         activation=Activation_function)
    return x

def add_maxpooling_layer(inputs,k):
    out = tf.nn.max_pool(inputs,ksize=[1,k,k,1],strides=[1,k,k,1],padding='SAME')
    return out
# bulid cnn net
conv1 = add_cnn_layer(img,16,5,1,tf.nn.relu)
pool1 = add_maxpooling_layer(conv1,2)
conv2 = add_cnn_layer(pool1,32,5,1,tf.nn.relu)
pool2 = add_maxpooling_layer(conv2,2)
flat = tf.reshape(pool2,[-1,7*7*32])
output = tf.layers.dense(flat,10)

loss = tf.losses.softmax_cross_entropy(onehot_labels = y,logits = output)
train = tf.train.AdamOptimizer(LR).minimize(loss)
accuracy = tf.metrics.accuracy(labels=tf.argmax(y,axis=1),predictions=tf.argmax(output,axis=1),)[1]

sess = tf.Session()
sess.run(tf.global_variables_initializer())
sess.run(tf.local_variables_initializer())

for step in range(5000):
    b_x,b_y = mnist.train.next_batch(batch_size)
    _,loss_ = sess.run([train,loss],feed_dict={x:b_x,y:b_y})
    if step%50==0:
        accuracy_ = sess.run(accuracy,feed_dict={x:test_x,y:test_y})
        print('train loss:%.4f'%loss_, '|test accuracy%.4f'%accuracy_)
   

我们可以发现上述两种方法的差别在于定义卷积神经网络的函数不同,方法一使用:

tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None)

来定义卷积网络,而方法二则使用了:

tf.layers.conv2d(inputs, filters, kernel_size, strides=(1,1),
                      padding='valid', data_format='channels_last',
                    dilation_rate=(1,1), activation=None, 
                    use_bias=True, kernel_initializer=None, 
                    bias_initializer=init_ops.zeros_initializer(), 
                    kernel_regularizer=None, 
                    bias_regularizer=None, 
                    activity_regularizer=None, trainable=True, 
                    name=None, reuse=None)

来定义卷积神经网络.

对于卷积神经网络而言,上述两者算法的实现的功能是一样的,只不过tf.layers.conv2d使用tf.nn.conv2d作为后端。

需要注意的是 tf.nn.conv2d中的filter为一个四维张量其格式必须为:

[filter_height, filter_width, in_channels, out_channels]

而 tf.layers.conv2d中的filters为一个整数,即输出空间的维度。

两者应用的选择如下:

tf.layers.conv2d参数丰富,一般用于从头训练一个模型。
tf.nn.conv2d,一般在下载预训练好的模型时使用。

实验结果如下图所示:


由于电脑未使用GPU加速,训练速度缓慢,所以accuracy达到94.47%便停止了训练,

如继续训练accuracy还有进一步的提升空间!

CNN基础
2019-07-16 12:18:40 syn_0123 阅读数 4
  • springmvc深入浅出(备java基础,javaee课程,struts...

    Spring web mvc架构、springmvc入门程序、非注解处理器映射器和适配器、注解开发处理器映射器和适配器、springmvc整合Mybatis、RequestMapping、Controller方法返回值、springmvc与struts2区别、springmvc上传图片、json数据交互、Validation、异常处理器、拦截器。

    12518 人正在学习 去看看 任亮

CNN,可视为图像到图像内容的一组分类概率的映射

构成:1.卷积层,是一种激活映射,也叫特征映射。主要作用,提特征。

其中,卷积核,可视为过滤器;过滤器越多,激活映射的深度越大,对输入内容了解的越多。越深入网络,过滤器的感受野越大,能处理更大范围的原始输入内容。

2.全连接层,实质是一种分类器。主要作用,分类。上层抽取的特征向量做一个权重计算,输出各个类别的概率。

3.池化层。减少输入的空间维度(长和宽),深度不变。作用:减少权重参数;控制过拟合。

4.Dropout层,防止CNN的权重与训练样本太过匹配而过拟合,只用于训练中,不用于测试过程。

2019-12-22 15:35:36 purson2 阅读数 29
  • springmvc深入浅出(备java基础,javaee课程,struts...

    Spring web mvc架构、springmvc入门程序、非注解处理器映射器和适配器、注解开发处理器映射器和适配器、springmvc整合Mybatis、RequestMapping、Controller方法返回值、springmvc与struts2区别、springmvc上传图片、json数据交互、Validation、异常处理器、拦截器。

    12518 人正在学习 去看看 任亮

论文地址:UNet++: A Nested U-Net Architecture
for Medical Image Segmentation

概述

  • 简单的跳过连接并不能满足医学图像的严格分割要求。
  • 为满足精确分割的需要,提出了U-Net++,一种基于嵌套和密集跳过连接的新分割体系结构。这基于当来自解码器和编码器网络的特征映射在语义上相似时,网络将处理更容易的学习任务。

方法

如图所示为U-Net++的网络结构:
在这里插入图片描述

  1. 在图形摘要中,黑色表示原始U-Net,绿色和蓝色表示跳过路径上的密集卷积块,红色表示深度监督。红色,绿色和蓝色组件将UNet ++与U-Net区分开来。
  2. 在UNet++中,Unet传统的简单跳跃连接做了改变,在U-Net中,编码器的特征图直接在解码器中接收;然而,在UNet ++中,它们经历了密集卷积块,其卷积层的数量取决于金字塔等级。

热力图heatmap

阅读数 730

没有更多推荐了,返回首页