A. 灰度图像时0到255之间的像素,哪个函数能把它变成0到1之间的
用这个函数:void cvNormalize( const CvArr* src, CvArr* dst,double a=1, double b=0, int norm_type=CV_L2,const CvArr* mask=NULL );
还有
我这个控件设定的高度是510,宽度是10,
我写了一个染色的函数,fun.
public static Bitmap fun(Bitmap Bmp)
{
int j=255;
int width=Bmp.width;
int Height=Bmp.Height;
BitmapData data = Bmp.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
unsafe
{
byte* p = (byte*)data.Scan0;//p是位图像素首地址。
int offset = data.Stride - width *3;
for (int y =0; y <255; y = y +1)
{
for (int x = 0; x <10; x++)
{
for (int i = 0; i <12; i++)
{
p[i] = (byte)j;
}
p +=6
}
p += offset;
j=j-1;
}
}
Bmp.UnlockBits(data);
return Bmp;
}
在窗体的load事件里我调用了一下
private void Form1_Load(object sender, EventArgs e)
{
private Bitmap ruler= new Bitmap(MainImage.Width,MainImage.Height);
fun(ruler);
MainImage.Image = ruler;
}
这样实现了灰度条的功能,但是灰度条的高度不能改变,我希望可以更改灰度条的大小,并且这个更改大小后的灰度条的范围还是255到0.
这些都是我目前找到的方法
B. 图像加密时是如何保证加密后的灰度直方图能均衡化的
参考答案: 树德务滋,除恶务尽。
C. 如何把灰度化的图像进行伪色处理matlab
用函数medfilt2 语法格式:g=medfilt2(f,[m,n],padopt) padopt为边界填充方式:默认值是“zeros” f代表你要进行处理的图像
D. 在MATLAB的sift算法中,怎么用一个模板与多幅图像进行匹配
(1) 尺度不变特征变换(SIFT算法)概要
是一种计算机视觉的算法,用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量。
此算法由 David Lowe 在1999年所发表,2004年完善总结。其应用范围包含物体辨识、机器人地图感知与导航、影像缝合、3D模型建立、手势辨识、影像追踪和动作比对。此算法有其专利,专利拥有者为 英属哥伦比亚大学。
局部影像特征的描述与侦测可以帮助辨识物体,SIFT 特征是基于物体上的一些局部外观的兴趣点而与影像的大小和旋转无关。 对于光线、噪声、些微视角改变的容忍度也相当高。基于这些特性,它们是高度显着而且相对容易撷取,在母数庞大的特征数据库中,很容易辨识物体而且鲜有误认。使用 SIFT特征描述对于部分物体遮蔽的侦测率也相当高,甚至只需要3个以上的SIFT物体特征就足以计算出位置与方位。在现今的电脑硬件速度下和小型的特征数据库条件下,辨识速度可接近即时运算。SIFT特征的信息量大,适合在海量数据库中快速准确匹配。
(2 ) Matlab代码主要功能函数如下: match.m:测试程序
功能:该函数读入两幅(灰度)图像,找出各自的 SIFT 特征, 并显示两连接两幅图像中被匹配的特征点(关键特征点(the matched keypoints)直线(将对应特征点进行连接)。判断匹配的准则是匹配距离小于distRatio倍于下一个最近匹配的距离( A match is accepted only if its distance is less than distRatio times the distance to the second closest match. 该程序返回显示的匹配对的数量。( It returns the number of matches displayed.) 调用实例: match('desk.jpg','book.jpg');
( 假如,想测试一个含有一本书的桌面的图像 和一本书的图像之间特征匹配) 调用方法和参数描述:略。 注意:(1)图像为灰度图像,如果是彩色图像,应该在调用前利用rgb2gray转换为灰度图像。
(2)参数distRatio 为控制匹配点数量的系数,这里取 0.6,该参数决定了匹配点的数量,在Match.m文件中调整该参数,获得最合适的匹配点数量。 sift.m :尺度不变特征变换(SIFT算法)的核心算法程序
功能:该函数读入灰度图像,返回SIFT 特征关键点( SIFT keypoints.) 调用方法和参数描述:
调用方式:[image, descriptors, locs] = sift(imageFile) 输入参数( Input parameters):
imageFile: 图像文件名.
输出或返回参数( Returned):
image: 是具有double format格式的图像矩阵
descriptors: 一个 K-by-128 的矩阵x, 其中每行是针对找到的K个关键特征点(the K keypoints)的不变量描述子. 这个描述子(descriptor)是一个拥有128个数值并归一化为单位长度向量.
locs: 是K-by-4 矩阵, 其中的每一行具有四个数值,表示关键点位置信息 (在图像中的行坐标,列坐标(row, column) ,注意,一般图像的左上角为坐标原点), 尺度scale,高斯尺度空间的参数,其中该参数也决定了frame(结构)确定的图像disk的大小, 最后一个参数是方向orientation). 方向参数的范围是[-PI, PI] 单位为弧度.
appendimages.m: 该函数创建一个新的图像分别包含两个匹配的图像和他们之间
的匹配对的连接直线. (3) 实际案例执行结果:
程序代码使用matlab和c混合编程。用matlab打开文件中的sift_match.m文件,并执行。如下图所示:
E. 求解关于基于matlab的灰度图像处理 办法 具体在问题补充部分(学校实验考核)
这么多文字 没细看 基础的置乱算法不难
matlab中文论坛 你搜索下 一搜一大把 不让发网址啊
F. 急求一个完整的c语言图像置乱加密算法!!!
#include"windows.h"
#include"stdio.h"
#include"string.h"
#include"malloc.h"
unsignedchar*pBmpBuf;//读入图像数据的指针
unsignedchar*pEnBmpBuf;//加密图像数据的指针
unsignedchar*pUnBmpBuf;//解密图像数据的指针
charkey=255;//密钥
intbmpWidth;//图像的宽
intbmpHeight;//图像的高
RGBQUAD*pColorTable;//颜色表指针
intbiBitCount;//图像类型,每像素位数
boolreadBmp(char*bmpName)
{
//二进制读方式打开指定的图像文件
FILE*fp=fopen(bmpName,"rb");
if(fp==0)return0;
//跳过位图文件头结构BITMAPFILEHEADER
fseek(fp,sizeof(BITMAPFILEHEADER),0);
//定义位图信息头结构变量,读取位图信息头进内存,存放在变量head中
BITMAPINFOHEADERhead;
fread(&head,sizeof(BITMAPINFOHEADER),1,fp);
//获取图像宽、高、每像素所占位数等信息
bmpWidth=head.biWidth;
bmpHeight=head.biHeight;
biBitCount=head.biBitCount;
//定义变量,计算图像每行像素所占的字节数(必须是4的倍数)
intlineByte=(bmpWidth*biBitCount/8+3)/4*4;
//灰度图像有颜色表,且颜色表表项为256
if(biBitCount==8){
//申请颜色表所需要的空间,读颜色表进内存
pColorTable=newRGBQUAD[256];
fread(pColorTable,sizeof(RGBQUAD),256,fp);
}
//申请位图数据所需要的空间,读位图数据进内存
pBmpBuf=newunsignedchar[lineByte*bmpHeight];
fread(pBmpBuf,1,lineByte*bmpHeight,fp);
//关闭文件
fclose(fp);
return1;
}
voidencrypt(chark)
{
//加密,奇数位置的像素使用位运算加密,偶数位置像素为原始值
intlineByte=(bmpWidth*biBitCount/8+3)/4*4;
pEnBmpBuf=newunsignedchar[lineByte*bmpHeight];
for(inti=0;i<lineByte*bmpHeight;i++)
{
if(i%2==0)
{
pEnBmpBuf[i]=pBmpBuf[i];
}
elsepEnBmpBuf[i]=pBmpBuf[i]^k;
}
}
voinencrypt(chark)
{
//解密
intlineByte=(bmpWidth*biBitCount/8+3)/4*4;
pUnBmpBuf=newunsignedchar[lineByte*bmpHeight];
for(inti=0;i<lineByte*bmpHeight;i++)
{
if(i%2==0)
{
pUnBmpBuf[i]=pEnBmpBuf[i];
}
elsepUnBmpBuf[i]=pEnBmpBuf[i]^k;
}
}
boolsaveBmp(char*bmpName,unsignedchar*imgBuf,intwidth,intheight,
intbiBitCount,RGBQUAD*pColorTable)
{
//如果位图数据指针为0,则没有数据传入,函数返回
if(!imgBuf)
{printf("error !");return0;}
//颜色表大小,以字节为单位,灰度图像颜色表为1024字节,彩色图像颜色表大小为0
intcolorTablesize=0;
if(biBitCount==8)
colorTablesize=1024;
//待存储图像数据每行字节数为4的倍数
intlineByte=(width*biBitCount/8+3)/4*4;
//以二进制写的方式打开文件
FILE*fp=fopen(bmpName,"wb");
if(fp==0)return0;
//申请位图文件头结构变量,填写文件头信息
BITMAPFILEHEADERfileHead;
fileHead.bfType=0x4D42;//bmp类型
//bfSize是图像文件4个组成部分之和
fileHead.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)
+colorTablesize+lineByte*height;
fileHead.bfReserved1=0;
fileHead.bfReserved2=0;
//bfOffBits是图像文件前3个部分所需空间之和
fileHead.bfOffBits=54+colorTablesize;
//写文件头进文件
fwrite(&fileHead,sizeof(BITMAPFILEHEADER),1,fp);
//申请位图信息头结构变量,填写信息头信息
BITMAPINFOHEADERhead;
head.biBitCount=biBitCount;
head.biClrImportant=0;
head.biClrUsed=0;
head.biCompression=0;
head.biHeight=height;
head.biPlanes=1;
head.biSize=40;
head.biSizeImage=lineByte*height;
head.biWidth=width;
head.biXPelsPerMeter=0;
head.biYPelsPerMeter=0;
//写位图信息头进内存
fwrite(&head,sizeof(BITMAPINFOHEADER),1,fp);
//如果灰度图像,有颜色表,写入文件
if(biBitCount==8)
fwrite(pColorTable,sizeof(RGBQUAD),256,fp);
//写位图数据进文件
fwrite(imgBuf,height*lineByte,1,fp);
//关闭文件
fclose(fp);
return1;
}
voidmain()
{
charinFileName[90],outFileName1[90],outFileName2[90];
printf("请输入原始位图文件的文件名:");
scanf("%s",inFileName);
printf("请输入加密程序产生的新位图文件的文件名:");
scanf("%s",outFileName1);
printf("请输入解密程序产生的新位图文件的文件名:");
scanf("%s",outFileName2);
//读入指定BMP文件进内存
readBmp(inFileName);
//输出图像的信息
printf("width=%d,height=%d,biBitCount=%d ",bmpWidth,bmpHeight,biBitCount);
//图像加密
encrypt(key);
//将加密数据存盘
saveBmp(outFileName1,pEnBmpBuf,bmpWidth,bmpHeight,biBitCount,pColorTable);
//图像解密
unencrypt(key);
//将解密数据存盘
saveBmp(outFileName2,pUnBmpBuf,bmpWidth,bmpHeight,biBitCount,pColorTable);
//清除缓冲区,pBmpBuf和pColorTable是全局变量,在文件读入时申请的空间
delete[]pBmpBuf;
if(biBitCount==8)
delete[]pColorTable;
}
读取BMP,使用位运算加密,你也可以自己改
dem数据的话,一般用GDAL库读取,加密的思路是类似的,最简单方法是把奇数位和偶数位的高程值置换一下
G. 灰度图像的制作方法
在photoshop cs4以及以上版本中,都也可以实现[2]。
方法:打开你所编辑的图片,依次打开图像,在选择模式,再择灰度。
H. 任选一种计算机语言,采用加密算法对灰度图像进行加密,并保证在传输过程中得完整性
这个。。。。20分谁给写啊?
建议自己做吧。。。。
I. 图像灰度化用什么函数
没有现成的函数吧,好像。我给你一个24bit灰度化程序,编程环境VC
//Bitmap.h
#include<malloc.h>
#include<string.h>
#include<stdio.h>
#ifdef _BITMAP_
#undef _BITMAP_
#endif
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
typedef BYTE* LPBYTE;
typedef unsigned int UINT;
typedef unsigned long LONG;
#pragma pack(1)
typedef struct tagBITMAPFILEHEADER{
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
}BITMAPFILEHEADER,*LPBITMAPFILEHEADER;
typedef struct tagBITMAPINFOHEADER{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPalanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
}BITMAPINFOHEADER,*LPBITMAPINFOHEADER;
typedef struct tagRGBQUAD{
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
}RGBQUAD,*LPRGBQUAD;
//Put data into the struct
typedef struct tagBMPINFOMATION{
LPBITMAPFILEHEADER lpBmpFileHeader;
LPBITMAPINFOHEADER lpBmpInfoHeader;
LPRGBQUAD lpRgbQuad;
LPBYTE lpBmpData;
LONG nBmpWidth;
LONG nBmpHeight;
}BMPINFOMATION;
#pragma pack()
typedef unsigned int UINT;
typedef unsigned int BOOL;
#define TRUE 1;
#define FALSE 0;
//Bitmap.cpp
#include"Bitmap.h"
#include<stdlib.h>
typedef struct tagDibFile{
LPBITMAPFILEHEADER m_lpFileHeader;
LPBITMAPINFOHEADER m_lpInfoHeader;
LPRGBQUAD m_lpRgbQuad;
LPBYTE m_lpBmpData;
}DibFile,*LPDibFile;
typedef char* LPSTR;
UINT NumOfDibColor(DibFile dibFile){
UINT nColors=0;
switch(dibFile.m_lpInfoHeader->biBitCount){
case 1:nColors=2;break;
case 4:nColors=16;break;
case 8:nColors=256;break;
default:nColors=0;
}
return nColors;
}
BOOL LoadDibFile(DibFile& dibFile,LPSTR m_lpFileName){
FILE* fp=fopen(m_lpFileName,"rb");
if(!fp) return FALSE;
UINT nCount,size;
//Read File Header
size=sizeof(BITMAPFILEHEADER);
dibFile.m_lpFileHeader=(LPBITMAPFILEHEADER)malloc(size);
nCount=fread(dibFile.m_lpFileHeader,1,size,fp);
if(nCount!=size) return FALSE;
//Read Info Header
size=sizeof(BITMAPINFOHEADER);
dibFile.m_lpInfoHeader=(LPBITMAPINFOHEADER)malloc(size);
nCount=fread(dibFile.m_lpInfoHeader,1,size,fp);
if(nCount!=size) return FALSE;
//Read RgbQuad
size=NumOfDibColor(dibFile)*sizeof(RGBQUAD);
if(size==0) dibFile.m_lpRgbQuad=NULL;
else{
dibFile.m_lpRgbQuad=(LPRGBQUAD)malloc(size);
nCount=fread(dibFile.m_lpRgbQuad,1,size,fp);
if(nCount!=size) return FALSE;
}
//Read File Data
fseek(fp,dibFile.m_lpFileHeader->bfOffBits,SEEK_SET);
UINT lineOfBits=(dibFile.m_lpInfoHeader->biWidth*dibFile.m_lpInfoHeader->biBitCount)/8;
size=lineOfBits*dibFile.m_lpInfoHeader->biHeight;
dibFile.m_lpBmpData=(LPBYTE)malloc(size);
nCount=fread(dibFile.m_lpBmpData,1,size,fp);
if(nCount!=size) return FALSE;
fclose(fp);
return TRUE;
}
BOOL BlackenDib256(DibFile& dibFile){
UINT size;
if(dibFile.m_lpInfoHeader->biBitCount<=8) return TRUE;
//Info Header
dibFile.m_lpInfoHeader->biBitCount=8;
dibFile.m_lpInfoHeader->biClrUsed=0;
//RgbQuad
size=NumOfDibColor(dibFile)*sizeof(RGBQUAD);
dibFile.m_lpRgbQuad=(LPRGBQUAD)malloc(size);
LPRGBQUAD RgbQuad=(LPRGBQUAD)malloc(sizeof(RGBQUAD));
for(UINT i=0;i<256;i++){
RgbQuad->rgbBlue=i;
RgbQuad->rgbGreen=i;
RgbQuad->rgbRed=i;
RgbQuad->rgbReserved=0;
memcpy(dibFile.m_lpRgbQuad+i,RgbQuad,sizeof(RGBQUAD));
}
//File Header
dibFile.m_lpFileHeader->bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+size;
//File Data
UINT lineOfBits=(dibFile.m_lpInfoHeader->biWidth*dibFile.m_lpInfoHeader->biBitCount)/8;
size=lineOfBits*dibFile.m_lpInfoHeader->biHeight;
LPBYTE lpData=(LPBYTE)malloc(size);
int r,g,b;
for(i=0;i<size;i++){
b=dibFile.m_lpBmpData[3*i];
g=dibFile.m_lpBmpData[3*i+1];
r=dibFile.m_lpBmpData[3*i+2];
memset(lpData+i*sizeof(BYTE),(BYTE)(0.4*b+0.3*g+0.3*r),sizeof(BYTE));
}
dibFile.m_lpBmpData=(LPBYTE)realloc(dibFile.m_lpBmpData,size);
memcpy(dibFile.m_lpBmpData,lpData,size);
return TRUE;
}
BOOL SaveDibFile(DibFile dibFile,LPSTR m_lpFileName){
FILE* fp=fopen(m_lpFileName,"wb");
if(!fp) return FALSE;
UINT nCount,size;
//Write File Header
size=sizeof(BITMAPFILEHEADER);
nCount=fwrite(dibFile.m_lpFileHeader,1,size,fp);
if(nCount!=size) return FALSE;
//Write Info Header
size=sizeof(BITMAPINFOHEADER);
nCount=fwrite(dibFile.m_lpInfoHeader,1,size,fp);
if(nCount!=size) return FALSE;
//Write RgbQuad
size=NumOfDibColor(dibFile)*sizeof(RGBQUAD);
if(dibFile.m_lpRgbQuad!=NULL){
nCount=fwrite(dibFile.m_lpRgbQuad,1,size,fp);
if(nCount!=size) return FALSE;
}
//Write File Data
fseek(fp,dibFile.m_lpFileHeader->bfOffBits,SEEK_SET);
UINT lineOfBits=(dibFile.m_lpInfoHeader->biWidth*dibFile.m_lpInfoHeader->biBitCount)/8;
size=lineOfBits*dibFile.m_lpInfoHeader->biHeight;
nCount=fwrite(dibFile.m_lpBmpData,1,size,fp);
if(nCount!=size) return FALSE;
fclose(fp);
return TRUE;
}
int main(){
DibFile dibFile;
LPSTR m_lpFileName="D:\\GraphTest\\in.bmp";
if(!LoadDibFile(dibFile,m_lpFileName)) return 0;
printf("bfType=%x\n",dibFile.m_lpFileHeader->bfType);
BlackenDib256(dibFile);
SaveDibFile(dibFile,"d:\\graphtest\\out.bmp");
return 1;
}
使用控制台程序,如果在tutbo c下,需要将#pragma指令去掉,你可以试试