图像拉普拉斯

疯魔症 2008-04-16 05:39:52
做图像的拉普拉斯素描遇到一点问题,处理的结果和示例不同,没有头绪,请教大家下面是我的处理结果

代码
void MyDib::Template(int Mask[][3],int Scale,int Offset)
{
if(make_Img_pDib == NULL)
return;
CDIB * make_Dib = new CDIB(make_Img_pDib,true);
int i,j;
double g;
for(i=1;i<hei -1;i++)
for(j=1;j<wid-1;j++)
{
g = ( Mask[0][0] * (make_Dib->getPixel(j-1,i-1)) + Mask[0][1]*(make_Dib->getPixel(j,i-1))+
Mask[0][2] * (make_Dib->getPixel(j+1,i-1)) +Mask[1][0] * (make_Dib->getPixel(j-1,i)) +
Mask[1][1] * (make_Dib->getPixel(j,i)) +Mask[1][2]* (make_Dib->getPixel(j+1,i)) +
Mask[2][0] * (make_Dib->getPixel(j-1,i+1)) +Mask[2][1] * (make_Dib->getPixel(j,i+1)) +
Mask[2][2] * (make_Dib->getPixel(j+1,i+1)) ) /Scale + Offset;
if(g>255) g=255;
if(g<0) g=0;
make_Dib->setPixel(j,i,(BYTE)g);
}
}
void MyDib::LaplacianD8()
{
int Scale,Offset,mask[3][3];
Scale = 1,Offset = 255;
mask[0][0] = mask[0][2] = mask[2][0] = mask[2][2] =- 1 ;
mask[0][1] = mask[1][0] = mask[1][2] = mask[2][1] = -1 ;
mask[1][1] = 8;
Template(mask,Scale,Offset);
}
...全文
345 44 打赏 收藏 转发到动态 举报
写回复
用AI写文章
44 条回复
切换为时间正序
请发表友善的回复…
发表回复
疯魔症 2008-04-17
  • 打赏
  • 举报
回复
谢楼上,我这就按你说的试下,另外处理结果完全没达到拉普拉斯素描的效果
karlzheng 2008-04-17
  • 打赏
  • 举报
回复
对了,你说跟例子完全不一样,具体是效果完全不一样还是效果没那么明显?。。。试试用别的图看看 有没有 达到 提取边缘 锐化的效果。。。。以确定是否是程序中某一个地方有BUG。。。
按这个算法到MATLAB跑一下看看效果是否一样。。。。
疯魔症 2008-04-17
  • 打赏
  • 举报
回复
回复所有楼上的:
比较郁闷,不问了,分给你们,结帖
rickymathit 2008-04-17
  • 打赏
  • 举报
回复
你这样问问题是有问题的,没有高手会费时间给我们这些菜鸟看这么多代码的
karlzheng 2008-04-17
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 zwb0540822 的回复:]
回33楼
是这样的{-1,-1,-1
-1,8,-1
-1,-1,-1}
Scale = 1,Offset=255; 还有我的处理结果和示例的完全不杨,laplacian素描完全没弄出来
[/Quote]
卷积积算看着好像没问题,Offset=255是不是太大了?。。。。
karlzheng 2008-04-17
  • 打赏
  • 举报
回复
那处理完了是什么效果?--会不会总卷积模板的问题上?
把{-1,-1,-1
-1,8,-1
-1,-1,-1}
改成
{-1,-1,-1
-1,4,-1
-1,-1,-1}
scale改成0.5
之类的试试?
Treazy 2008-04-16
  • 打赏
  • 举报
回复
你让我看看图,以为这帖子有人回了呢

原来都是自己在唱戏
星羽 2008-04-16
  • 打赏
  • 举报
回复
看不到你的图 = =
疯魔症 2008-04-16
  • 打赏
  • 举报
回复
回33楼
是这样的{-1,-1,-1
-1,8,-1
-1,-1,-1}
Scale = 1,Offset=255; 还有我的处理结果和示例的完全不杨,laplacian素描完全没弄出来
疯魔症 2008-04-16
  • 打赏
  • 举报
回复
对除首尾每行首尾每列的每个像素作3乘3的卷积
疯魔症 2008-04-16
  • 打赏
  • 举报
回复
我重发下

void MyDib::Template(int Mask[][3],int Scale,int Offset)
{
if(make_Img_pDib == NULL)
return;
CDIB * make_Dib = new CDIB(make_Img_pDib,true); //构造CDIB类,来操作像素
int i,j;
double g; //六字节统计值
for(i=1;i<hei -1;i++) //去掉第一行和最后一行
for(j=1;j<wid-1;j++) //去掉第一列和最后一列
{
g = ( Mask[0][0] * (make_Dib->getPixel(j-1,i-1)) + Mask[0][1]*(make_Dib->getPixel(j,i-1))+
Mask[0][2] * (make_Dib->getPixel(j+1,i-1)) +Mask[1][0] * (make_Dib->getPixel(j-1,i)) +
Mask[1][1] * (make_Dib->getPixel(j,i)) +Mask[1][2]* (make_Dib->getPixel(j+1,i)) +
Mask[2][0] * (make_Dib->getPixel(j-1,i+1)) +Mask[2][1] * (make_Dib->getPixel(j,i+1)) +
Mask[2][2] * (make_Dib->getPixel(j+1,i+1)) ) /Scale + Offset;
if(g>255) g=255; //大于255的赋值为255
if(g<0) g=0; //小于0的赋值为0
make_Dib->setPixel(j,i,(BYTE)g); //存像素
}
}

void MyDib::LaplacianD8()
{
int Scale,Offset,mask[3][3];
Scale = 1,Offset = 255;
mask[0][0] = mask[0][2] = mask[2][0] = mask[2][2] =- 1 ;
mask[0][1] = mask[1][0] = mask[1][2] = mask[2][1] = -1 ;
mask[1][1] = 8;
Template(mask,Scale,Offset); //调用卷积模版
}
liuworld 2008-04-16
  • 打赏
  • 举报
回复
s域变换 能说下你的思路吗? 域变换忘的差不多了
baichunjian 2008-04-16
  • 打赏
  • 举报
回复
写的还行,就是能把注释也写上就好了
疯魔症 2008-04-16
  • 打赏
  • 举报
回复
疯魔症 2008-04-16
  • 打赏
  • 举报
回复
yslan 2008-04-16
  • 打赏
  • 举报
回复
顶吗
疯魔症 2008-04-16
  • 打赏
  • 举报
回复
顶一下
疯魔症 2008-04-16
  • 打赏
  • 举报
回复
顶一下
red_berries 2008-04-16
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 zwb0540822 的回复:]
此帖标题有问题
[/Quote]

图像 拉不拉屎?
这个不用问了,不会拉
疯魔症 2008-04-16
  • 打赏
  • 举报
回复
顶起来,吃饭去
加载更多回复(24)

64,312

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧